【问题标题】:Bind and access checkbox value within a gridview在 gridview 中绑定和访问复选框值
【发布时间】:2012-06-22 14:48:35
【问题描述】:

在我的网格视图中,我有一个复选框列,并且正在将网格视图与字典绑定。我需要从复选框中获取对应的Id

在我的字典中,我有类似的键值

Id         Name
--         ----
 1         Arts
 2         Science
 3         Engineering

这里,我尝试将这个复选框的值绑定为

<asp:TemplateField>
    <ItemTemplate>
      <asp:CheckBox ID="chkSelItem" value="<%# Eval("Key.Id") %>" 
                                                       runat="server" />
    </ItemTemplate>
</asp:TemplateField>

<asp:TemplateField HeaderText="Department">
    <ItemTemplate>
         <%# Eval("Key.Name") %>
    </ItemTemplate>
    <HeaderStyle HorizontalAlign="Left" />
</asp:TemplateField>

从代码隐藏中,我尝试了

foreach (GridViewRow row in gridDepartments.Rows)
        {
            CheckBox chkSelItem = (CheckBox)row.FindControl("chkSelItem");

            if (chkSelItem.Checked)
            {
                int departmentId = int.Parse(chkSelItem.Text);
                ////
                ////                 
            }
        }

抛出错误,或未显示复选框的任何值。

我也尝试过FindControl,但没有使用它,因为key &amp; Value 对中使用了一个类(它继承了另一个类)和一个布尔值。这就是我正在尝试的方法,任何人都可以在这里帮助我,提前谢谢.....

【问题讨论】:

  • 我在gridview上方有一个删除按钮,当我选择多个复选框并单击delete按钮时,我必须获取相应的Ids并从数据库

标签: c# asp.net


【解决方案1】:
You can try this one...

Bind id to lable instead of to checkbox as below.

<asp:TemplateField>     
<ItemTemplate>       
<asp:CheckBox ID="chkSelItem" runat="server" />     

<asp:Label ID="lblSelectedItem" value=<%# Eval("Key.Id")) %> visible="False"/>
</ItemTemplate> </asp:TemplateField>



In codebehind try this

foreach (GridViewRow row in gridDepartments.Rows)         
{             
      CheckBox chkSelItem = (CheckBox)row.FindControl("chkSelItem");
       Label lblSelectedItem= (Label)row.FindControl("lblSelectedItem");

      if (chkSelItem.Checked) 
      {
                 int departmentId = int.Parse(lblSelectedItem.Text); 
      }
} 



Hope this is what u want...

【讨论】:

  • 是个好主意,绑定Text 值就像一个魅力,我也可以得到 Id,我在想如何隐藏 Text 值,你给出了一个好主意,我试试看告诉你
【解决方案2】:

使用

CheckBox chkSelItem = (CheckBox)row.cell[0].FindControl("chkSelItem");// Replace row.cell[0] accrding to you celll index

而不是

 CheckBox chkSelItem = (CheckBox)row.FindControl("chkSelItem");

【讨论】:

    【解决方案3】:

    在 Aspx 页面中:

    <asp:CheckBox ID="chkSelItem" Text="<%# Eval("Key.Id") %>" runat="server" />
    

    在代码隐藏中添加检查以确保项目不为空:

        CheckBox chkSelItem = (CheckBox)row.FindControl("chkSelItem");
    
        if (chkSelItem != null && chkSelItem.Checked && !string.IsNullOrEmpty(chkSelItem.Text))
        {
    
            int departmentId = int.Parse(chkSelItem.Text);                
        }
    

    【讨论】:

      【解决方案4】:

      我认为您必须使用 Text 而不是 value,因为您正在分配 value 并获取 text 属性。文本将为空字符串,用 int 解析会抛出异常。

      int.Parse(chkSelItem.Text);

      <asp:CheckBox ID="chkSelItem" value="<%# Eval("Key.Id") %>" runat="server" />
      

      应该是

      <asp:CheckBox ID="chkSelItem" Text="<%# Eval("Key.Id") %>" runat="server" />
      

      或者

      如果必须使用复选框的值,则访问值而不是文本

      <asp:CheckBox ID="chkSelItem" value="<%# Eval("Key.Id") %>" runat="server" />
      
      int departmentId = int.Parse(chkSelItem.Attributes["value"].ToString());
      

      【讨论】:

      • 它的工作 Adil,但我需要隐藏 Text 值,等待我按照 SimplyVaibh 的解决方案进行处理,一旦完成,我会通知你
      • 不客气,您可以通过 chkSelItem .Attributes["value"].ToString(); 获得价值
      • 更新我的答案,这样可以得到checkbox的值。
      • 感谢阿迪尔,您的友好回复,我很困惑我必须将哪个答案标记为已接受
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-11-16
      • 1970-01-01
      • 1970-01-01
      • 2015-10-15
      • 1970-01-01
      • 2014-04-07
      相关资源
      最近更新 更多