绑定并访问gridview中的复选框值

时间:2012-06-22 06:03:21

标签: c# asp.net

在我的网格视图中,我有一个复选框列,并使用字典绑定gridview。我需要从复选框中获取相应的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 & Value对使用了一个类(继承了另一个类)和一个bool。多数民众赞成在尝试这样的事情,任何人都可以帮助我,提前谢谢.....

4 个答案:

答案 0 :(得分:1)

使用

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

而不是

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

答案 1 :(得分:1)

我认为您必须使用Text而不是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());

答案 2 :(得分:1)

在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);                
    }

答案 3 :(得分: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...