我有一个ASP GridView,其中包含一个包含CheckBox控件的列。这些CheckBox绑定到通过SqlDataSource访问的位字段。 GridView是可编辑的,并且加载时禁用CheckBoxes。 我试图在编辑期间将enabled属性更改为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 property = true。我想知道在此事件运行后是否因为PostBack而被设置为false。此页面的Load方法为空,但我认为在ASP页面中遇到了enabled = false代码。
GridView的UI
答案 0 :(得分:0)
解决方案非常简单。我没有将CheckBox放在TemplateField中,而是为CheckBox列设置了DataField属性。这使编辑功能无需进一步的C#代码。
<asp:CheckBoxField DataField="Finished"
HeaderText="Finished"
readonly="false" />