【问题标题】:GridView Checkbox - Cannot Change PropertiesGridView 复选框 - 无法更改属性
【发布时间】:2013-06-28 14:36:55
【问题描述】:

我有一个包含 CheckBox 控件的列的 ASP GridView。这些复选框绑定到通过 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 属性 = true。我想知道在此事件运行后是否由于 PostBack 将其设置回 false。此页面的 Load 方法为空,但我认为在 ASP 页面中命中了 enabled=false 代码。

GridView 的 UI

【问题讨论】:

  • 在标记中,您有复选框Enabled="false"。你为什么要这样明确地设置它?
  • 因为我不希望在单击编辑按钮之前启用复选框。
  • 如果加载方法为空,GV在哪里绑定?尝试设置复选框的可见性,看看它是否按预期消失/重新出现。
  • 它通过每一列的DataField 属性绑定在ASP 代码中。此属性的字符串对应于从 SqlDataSource 的选择命令返回的字段。我已经试过了。当我单步调试调试器时,它看起来不错,但在事件退出后,没有任何更改持续存在。我认为这是 RowEdit 事件完成后回发的问题。

标签: c# asp.net


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-06-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多