在我的网格视图中,我有一个复选框列,并使用字典绑定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。多数民众赞成在尝试这样的事情,任何人都可以帮助我,提前谢谢.....
答案 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...