0

在我的网格视图中,我有一个复选框列,并且正在将网格视图与字典绑定。我需要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对中正在使用一个类(它继承另一个类)和一个布尔值。这就是我正在尝试的方法,任何人都可以在这里帮助我,提前谢谢.....

4

4 回答 4

1

采用

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

代替

 CheckBox chkSelItem = (CheckBox)row.FindControl("chkSelItem");
于 2012-06-22T06:15:20.937 回答
1

我认为您必须使用 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());
于 2012-06-22T06:17:26.240 回答
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);                
    }
于 2012-06-22T06:29:26.430 回答
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...
于 2012-06-22T06:32:44.180 回答