我有一个包含 CheckBox 控件的列的 ASP GridView。这些复选框绑定到通过 SqlDataSource 访问的位字段。GridView 是可编辑的,并且 CheckBoxes 在加载时被禁用。我试图在编辑期间使启用的属性更改为 true,因此可以更改正在编辑的行中的 CheckBox,并且此更改会更新到数据库中的位字段。
ASP 代码
<asp:UpdatePanel ID="upGridView" runat="server" UpdateMode="Conditional">
<ContentTemplate>
<asp:GridView ID="gvChecklist" runat="server"
AutoGenerateColumns="false" DataSourceID="dsChecklist"
AutoGenerateEditButton="true" onrowupdating="gvChecklist_RowUpdating"
onrowediting="gvChecklist_RowEditing">
<Columns>
<asp:TemplateField HeaderText="Finished">
<ItemTemplate><asp:CheckBox ID="cbFinished" runat="server" Enabled="false" Checked='<%# Eval("Finished") ?? false %>' /> </ItemTemplate>
</asp:TemplateField>
<asp:BoundField DataField="Division"
HeaderText="Division"
readonly="true" />
<asp:BoundField DataField="Application"
HeaderText="Application"
readonly="true" />
<asp:BoundField DataField="Task"
HeaderText="Task"
readonly="true" />
<asp:BoundField DataField="TestedBy" HeaderText="Tested By" readonly="true"/>
<asp:BoundField DataField="Notes" HeaderText="Notes" ReadOnly="false"/>
<asp:BoundField DataField="JiraTicket"
HeaderText="JIRA Ticket"
readonly="false" />
</Columns>
</asp:GridView>
</ContentTemplate>
</asp:UpdatePanel>
RowEditing 事件的 C# 代码隐藏
protected void gvChecklist_RowEditing(object sender, GridViewEditEventArgs e)
{
GridView gvChecklist = (GridView)LoginView1.FindControl("gvChecklist");
CheckBox cb = (CheckBox)gvChecklist.Rows[e.NewEditIndex].Cells[1].FindControl("cbFinished");
cb.Enabled = true;
gvChecklist.DataBind();
}
-edit:我觉得有必要在这里添加更多信息。将 CheckBox cb 设置为 GridView Row 的 CheckBox 的代码似乎工作正常,因为我可以通过调试器看到 enabled 属性 = true。我想知道在此事件运行后是否由于 PostBack 将其设置回 false。此页面的 Load 方法是空的,但我认为在 ASP 页面中正在命中 enabled=false 代码。
GridView 的 UI