我绞尽脑汁试图访问用户选择复选框的 gridview 的 ID 列:
<asp:GridView ID="gvUserFiles" runat="server">
<Columns>
<asp:TemplateField HeaderText="Select" ItemStyle-HorizontalAlign="Center" >
<ItemTemplate>
<asp:CheckBox ID="chkSelect" runat="server" />
</ItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>
gridview 列是 chkSelect(复选框)、Id、fileName、CreateDate
当用户选中复选框并按下按钮时,我想接收“id”列值。
这是我的按钮代码:
foreach (GridViewRow row in gvUserFiles.Rows)
{
var test1 = row.Cells[0].FindControl("chkSelect");
CheckBox cb = (CheckBox)(row.Cells[0].FindControl("chkSelect"));
//chk = (CheckBox)(rowItem.Cells[0].FindControl("chk1"));
if (cb != null && cb.Checked)
{
bool test = true;
}
}
cb.checked 总是返回 false。
最佳答案
复选框总是未选中可能是 DataBinding 的问题。在调用按钮单击事件之前,请确保您没有对 GridView
进行数据绑定(bind)。有时人们将 DataBinding 粘贴到 Page_load
事件上,然后它在每个 PostBack
上保留 DataBinding。由于在按钮点击前被调用,所以可以起到直接的作用。
当 GridView
是 DataBound 时,您将失去来自页面的所有状态。
如果您在 Page_load
上对 GridView
进行数据绑定(bind),将其包装以验证 !IsPostBack
:
if (!IsPostBack)
{
gvUserFiles.DataSource = data;
gvUserFiles.DataBind();
}
如果不是您的情况,您可以尝试根据 Request.Form
值验证选中的属性:
protected void button_OnClick(object sender, EventArgs e)
{
foreach (GridViewRow row in gvUserFiles.Rows)
{
CheckBox cb = (CheckBox)row.FindControl("chkSelect");
if (cb != null)
{
bool ckbChecked = Request.Form[cb.UniqueID] == "on";
if (ckbChecked)
{
//do stuff
}
}
}
}
CheckBox
的Checked
值由浏览器作为值"on"
发送。如果未在浏览器中选中,则请求不会执行任何操作。
关于c# - 返回 Gridview 复选框 bool 值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15186546/