C# gridview中的Checked复选框,c代码中的Checked属性为false
我有自定义上传控制。控件的gridview包含上载的文档,第一列有复选框,用于通过单击“删除”按钮选择要删除的文档。upload控件包含在应用程序中几乎所有的其他UserControls中,除了一个控件外,它都可以正常工作。问题是当我检查某个文档以进行删除时,当代码执行复选框的checked属性为false时C# gridview中的Checked复选框,c代码中的Checked属性为false,c#,ajax,gridview,checkbox,C#,Ajax,Gridview,Checkbox,我有自定义上传控制。控件的gridview包含上载的文档,第一列有复选框,用于通过单击“删除”按钮选择要删除的文档。upload控件包含在应用程序中几乎所有的其他UserControls中,除了一个控件外,它都可以正常工作。问题是当我检查某个文档以进行删除时,当代码执行复选框的checked属性为false时 <asp:GridView ID="gvFiles" runat="server" AutoGenerateColumns="false" ShowHeader="true"
<asp:GridView ID="gvFiles" runat="server" AutoGenerateColumns="false" ShowHeader="true"
CssClass="DataGrid" Width="100%" OnRowDataBound="gvFiles_RowDataBound">
<HeaderStyle HorizontalAlign="left" CssClass="UploadControlGridHeader" />
<RowStyle CssClass="dlcell" />
<EditRowStyle CssClass="dlsell" />
<Columns>
<asp:TemplateField HeaderText="Delete">
<ItemStyle Width="8%" HorizontalAlign="Center" />
<ItemTemplate>
<asp:CheckBox ID="chkFile" runat="server" />
</ItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>
这是删除按钮事件
protected void btnDelete_Click(object sender, EventArgs e)
{
for (int i = 0; i < gvFiles.Rows.Count; i++)
{
CheckBox chk = (CheckBox)gvFiles.Rows[i].Cells[0].FindControl("chkFile");
if (chk.Checked)
{
// If file is marked/checked to be deleted
// then delete it.
DeleteFile(i);
}
}
Session[KEY_VIEWSTATEFILES] = this.FileList;
// Repopulate gridview
BindToGridView();
// Call command to keep same visible screen.
CustomCommandEventArgs command = new CustomCommandEventArgs(COMMAND_FILE_DELETED, null);
OnHappyCommand(command);
}
没有DeleteFilei代码,我不能确定,但我会猜测,在该函数中,您删除/删除了行。我说得对吗?如果是,那么它会更改所有行的索引,这会使您在检查记得已检查的行时认为它未被检查。您必须使用反向for循环来解决此问题。检查您控制的页面上是否启用了viewstate。检查页面级别和控制级别。我认为有一个DataBind方法调用将选中状态重置为复选框,这就是问题所在。在使用数据绑定之前,应完成选中复选框的任何操作