1

我有一个包含 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 在此处输入图像描述

4

1 回答 1

1

解决方案非常简单。我可以为 CheckBox 列设置一个 DataField 属性,而不是在 TemplateField 中放置一个 CheckBox。这使得编辑功能无需进一步的 C# 代码即可工作。

<asp:CheckBoxField DataField="Finished"
    HeaderText="Finished"
    readonly="false" />
于 2013-06-28T20:21:31.347 回答