Sup*_*tar 7 .net asp.net checkbox gridview
需要一些帮助来解决这个问题.
我有一个gridview,在gridview中我有一个复选框,单击复选框后,我正在做一个回发事件,并尝试仅在数据库上更新此特定行.
这是我的gridview复选框代码.看到OnCheckedChanged.
<asp:TemplateField HeaderText="Sample">
<ItemTemplate>
<asp:CheckBox runat="server"
ID="chkSample"
Checked='<%# Bind("Sample") %>'
OnCheckedChanged="UpdateSupplyLed"
AutoPostBack="True">
</asp:CheckBox>
</ItemTemplate>
</asp:TemplateField>
Run Code Online (Sandbox Code Playgroud)
码:
protected void UpdateSupplyLed(object sender, EventArgs e)
{
foreach (GridViewRow di in SamplingGridView.Rows)
{
CheckBox chkBx = (CheckBox)di.FindControl("chkSample");
if (chkBx != null && chkBx.Checked)
{
//update database logic here.
}
}
}
Run Code Online (Sandbox Code Playgroud)
上面的代码工作正常,但它给我的所有复选框都被检查,而不管我刚检查的那个.我不想要他们所有人.
如何才能获得刚刚检查过的唯一一行值.某些行可能已经被检查过,因为这些记录的状态为true,我不想更新这些记录.
我想我的问题是对的!
更新:答案是:
protected void UpdateSupplyLed(object sender, EventArgs e)
{
CheckBox chkSampleStatus = sender as CheckBox;
bool sample = chkSampleStatus.Checked;
GridViewRow row = chkSampleStatus.NamingContainer as GridViewRow;
TextBox txtId = row.FindControl("Id") as TextBox;
int id = Int32.Parse(txtId.Text);
}
Run Code Online (Sandbox Code Playgroud)
试试这个:
CheckBox chkBx = sender as CheckBox;
Run Code Online (Sandbox Code Playgroud)
而不是迭代所有行.
我自己没有以这种方式在GridView中使用CheckBox.通常我会使用GridView的OnRowCommand事件,并使用RowIndex或CommandArgument值来更新数据库.
考虑一下OnRowcommand对于CheckBox来说可能很棘手,一个更好的解决方案可能是坚持使用复选框的CheckChanged事件并使用控件NamingContainer导航到GridViewRow服务器端.就像是:
GridViewRow row = chkBx.NamingContainer as GridViewRow;
Run Code Online (Sandbox Code Playgroud)
我假设你去了CheckBox => Cell => Row,如果你使用Google ASP.NET NamingContainer,你会得到一些更具体的内容.
| 归档时间: |
|
| 查看次数: |
33106 次 |
| 最近记录: |