GridView复选框 - 无法更改属性

时间:2013-06-28 14:36:55

标签: c# asp.net

我有一个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 enter image description here

1 个答案:

答案 0 :(得分:0)

解决方案非常简单。我没有将CheckBox放在TemplateField中,而是为CheckBox列设置了DataField属性。这使编辑功能无需进一步的C#代码。

<asp:CheckBoxField DataField="Finished"
    HeaderText="Finished"
    readonly="false" />