代码隐藏未拾取回发时对Gridview上的复选框所做的更改
本文关键字:复选框 Gridview 隐藏 代码 | 更新日期: 2023-09-27 18:20:25
我有一个网格视图,它有一个模板字段,其中包含一个复选框作为字段之一
<asp:TemplateField HeaderText="Confirm Driver Details" FooterText="Confirm Driver Details">
<ItemTemplate>
<asp:CheckBox ID="chkConfirmDetails" runat="server" MaxLength="100" Width="50px" Enabled="false" Checked="true"></asp:CheckBox>
</ItemTemplate>
</asp:TemplateField>
最初,这是选中的,但未启用。
用户上传一个文件,该文件加载到一个对象中,然后绑定到gridview。在RowDataBound事件中,会对数据执行一些验证。在某些情况下,如果某些验证失败,我想启用复选框并取消选中它
CheckBox chkConfirmDetails = (CheckBox)e.Row.Cells[e.Row.Cells.Count - 2].FindControl("chkConfirmDetails");
//If this is enabled then we just need to check whether it is ticked or not
if (!chkConfirmDetails.Enabled)
{
if (!ValidateDriver(_uploadData.DriverData[e.Row.DataItemIndex], out driverValidationMessage))
{
Label label = new Label();
label.Text = "Details of this Driver cannot be found<br />Please double-check to see if the Driver Number, Date of Birth and PPSN are entered correctly<br />If you are sure you have the correct details entered tick this box to confirm";
e.Row.Cells[e.Row.Cells.Count - 2].Controls.Add(label);
e.Row.Cells[e.Row.Cells.Count - 2].BackColor = System.Drawing.Color.Yellow;
((TableRow)e.Row.Cells[e.Row.Cells.Count - 2].Parent).BackColor = System.Drawing.Color.Red;
chkConfirmDetails.Enabled = true;
chkConfirmDetails.Checked = false;
_numberOfInvalidCells++;
}
}
这一切都很好,复选框将被启用并取消选中。
然后,用户可以选择勾选该框以确认详细信息是否正确,并重新验证该行。在数据网格的每一行上都有一个按钮,用户可以单击该按钮来执行此功能。因此,当用户单击验证行按钮时,将再次调用上面的代码。这一次,复选框已启用,根据用户所做的操作,可以勾选也可以不勾选。
然而,当我使用FindControl方法获得对复选框的引用时,它仍然显示为未启用和已选中(即使它在表单上已启用和未选中)
有人能解释为什么会发生这种情况,以及获取复选框实际状态的方法吗?
编辑
查看Request.Form.AllKeys数据,它有网格视图中大多数其他模板项的键(文本框和下拉列表),但没有复选框或验证按钮
RowDataBound
。这意味着你以前打过电话。但结果是,用户所做的所有更改都会被覆盖。
所以问题是,为什么需要调用GridView.DataBind()
进行重新验证?难道你不能在一个迭代所有GridViewRows的方法中做到这一点吗?
顺便问一下,你使用的具体原因是什么
(CheckBox)e.Row.Cells[e.Row.Cells.Count - 2].FindControl("chkConfirmDetails")
而不是简单的
(CheckBox)e.Row.FindControl("chkConfirmDetails")
?