【问题标题】:Select one Gridview row with radio button ASP.NET使用单选按钮 ASP.NET 选择一个 Gridview 行
【发布时间】:2015-11-11 15:47:02
【问题描述】:

我有一个绑定到带有单选按钮列的数据库表的 Gridview,我想选择带有单个单选按钮的行。需要一个单选按钮组吗?我有上面带有复选框的代码,但我想将其更改为单选按钮。我认为单选按钮代码是相似的。谢谢你。我正在使用 ASP.NET C#

<asp:GridView ID="DateGrid" runat="server" CellPadding="4" ForeColor="#333333" 
    GridLines="None" >
    <AlternatingRowStyle BackColor="White" />
   <Columns>
   <asp:TemplateField>
   <ItemTemplate>
 <asp:RadioButton ID="RowSelector" runat="server" GroupName="SelectGroup" />
  </ItemTemplate>
 </asp:TemplateField>
 </Columns> 
</asp:GridView>

代码背后:

foreach (GridViewRow row in DateGrid.Rows) 

        {

            if (row.RowType == DataControlRowType.DataRow)
            {

                CheckBox chkRow = (row.Cells[0].FindControl("DateChBox") as CheckBox);

                if (chkRow.Checked)
                {

                    startdate = row.Cells[2].Text;
                    enddate = row.Cells[3].Text;

【问题讨论】:

  • @MartínMisol 我要做的是选择一个单选按钮。我的 gridview 选择多个
  • 在我链接的文章中,图 11 显示了与您遇到的问题类似的问题,然后详细解释了解决方案。
  • @MartínMisol 谢谢,现在可以使用了:)

标签: c# datagridview radio-button


【解决方案1】:

这可能对你有帮助

代码在前面

<asp:GridView ID="gv" runat="server" AutoGenerateColumns="false" Width="100%">
        <Columns>
            <asp:TemplateField HeaderText="Select">
                <ItemTemplate><asp:RadioButton ID="RowSelector" runat="server" onclick="checkRadioBtn(this);" /></ItemTemplate>
            </asp:TemplateField>
            <asp:TemplateField HeaderText="Start Date">
                <ItemTemplate><asp:Label ID="lblStartDate" runat="server" Text='<%# DateTime.Now.ToString("MM/dd/yyyy") %>'></asp:Label></ItemTemplate>
            </asp:TemplateField>
            <asp:TemplateField HeaderText="End Date">
                <ItemTemplate><asp:Label ID="lblEndDate" runat="server" Text='<%# DateTime.Now.ToString("MM/dd/yyyy") %>'></asp:Label></ItemTemplate>
            </asp:TemplateField>
        </Columns>
    </asp:GridView>

当您选中其他单选按钮时,Javascript 将取消选中其他

<script type="text/javascript">
    function checkRadioBtn(id) {
        var gv = document.getElementById('<%=gv.ClientID %>');

        for (var i = 1; i < gv.rows.length; i++) {
            var radioBtn = gv.rows[i].cells[0].getElementsByTagName("input");

            // Check if the id not same
            if (radioBtn[0].id != id.id) {
                radioBtn[0].checked = false;
            }
        }
    }
</script>

用于绑定目的的代码隐藏...

protected void Page_Load(object sender, EventArgs e)
{
    // Check
    if (!IsPostBack)
    {
        // Varaible
        DataTable dt = new DataTable();
        dt.Columns.Add("A");
        dt.Columns.Add("B");

        for (int i = 0; i < 3; i++)  dt.Rows.Add(i.ToString(), i.ToString()); 

        // Bind
        gv.DataSource = dt;
        gv.DataBind();
    }
}

【讨论】:

    【解决方案2】:

    这可以通过在单选按钮上启用 AutoPostBack 从后端完成:

     <asp:RadioButton ID="RowSelector" runat="server" GroupName="SelectGroup" Checked="false" AutoPostBack="true" OnCheckedChanged="rd_CheckedChanged" />
    

    并在 OnCheckedChanged 事件中使用以下代码:

    static int rdChecked = -1; //Use this variable to store the last checked row
    protected void rd_CheckedChanged(object sender, EventArgs e)
    {
       if (rdChecked != -1)
       {
           RadioButton rdSelection = DateGrid.Rows[rdChecked].FindControl("RowSelector") as RadioButton;
           rdSelection.Checked = false;
       }
    
       for (int i = 0; i < DateGrid.Rows.Count; i++)
       {
           RadioButton rdSelection = DateGrid.Rows[i].FindControl("RowSelector") as RadioButton;
    
           if (rdSelection.Checked)
           {
               rdChecked = i;
           }
       }
    }
    

    【讨论】:

      【解决方案3】:
      <asp:GridView ID="DateGrid" runat="server" DataSourceID="sdsData">
      <Columns>
          <asp:TemplateField>
              <ItemTemplate>
                  <asp:RadioButton ID="chk" ClientIDMode="Static" runat="server" onclick="$('[id=chk]').prop('checked' , '');$(this).prop('checked' , 'checked');"></asp:RadioButton>
                  <asp:HiddenField ID="hdn" runat="server" Value='<%# Eval("Fserial") %>' />
              </ItemTemplate>
              <ItemStyle HorizontalAlign="Center" Width="20px" />
          </asp:TemplateField>
          <asp:BoundField DataField="Fname" HeaderText="Name" SortExpression="Fname" />
      </Columns></asp:GridView>
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-05-03
        • 1970-01-01
        • 2013-07-27
        • 2016-09-24
        • 1970-01-01
        • 1970-01-01
        • 2015-09-05
        • 1970-01-01
        相关资源
        最近更新 更多