复选框网格视图启用和禁用

4
我有一个网格视图,其中的复选框一开始是禁用状态。当我单击网格视图中的编辑按钮时,我希望启用它们。以下是标记:
<asp:GridView ID="grd_Bookcode" runat="server" DataSourceID="sqldatasource1" 
autogeneratecolumns="False" onrowcommand="grd_Bookcode_RowCommand1" 
onrowdatabound="grd_Bookcode_RowDataBound">
<Columns>
    <asp:BoundField DataField="BookCode" HeaderText="Book Code"/>
    <asp:BoundField DataField="mag_name" HeaderText="Name"/>
    <asp:BoundField DataField="display_date" HeaderText="Display Date"/>
   <asp:TemplateField HeaderText = "PC">
        <ItemTemplate>
            <asp:CheckBox ID="CheckBox1" runat="server" Checked='<%# Eval("82_PC").ToString() == "1" ? true:false %>' Enabled="false" />
        </ItemTemplate>
     </asp:TemplateField>
     <asp:TemplateField HeaderText="eReader">
        <ItemTemplate>
            <asp:CheckBox ID="CheckBox2" runat="server" Checked='<%# Eval("83_eReader").ToString() == "1" ? true:false %>' Enabled="false" />
        </ItemTemplate>
    </asp:TemplateField>
     <asp:TemplateField HeaderText="Tablet">
        <ItemTemplate>
            <asp:CheckBox ID="CheckBox3" runat="server" Checked='<%# Eval("84_Tablet").ToString() == "1" ? true:false %>' Enabled="false"/>
        </ItemTemplate>
    </asp:TemplateField>
     <asp:TemplateField HeaderText="Mobile">
        <ItemTemplate>
            <asp:CheckBox ID="CheckBox4" runat="server" Checked='<%# Eval("85_Mobile").ToString() == "1" ? true:false %>' Enabled="false" />
        </ItemTemplate>
    </asp:TemplateField>
     <asp:TemplateField HeaderText="None">
        <ItemTemplate>
            <asp:CheckBox ID="CheckBox5" runat="server" Checked='<%# Eval("86_None").ToString() == "1" ? true:false %>' Enabled="false" />
        </ItemTemplate>
   </asp:TemplateField>
    <asp:CommandField ShowEditButton="True" />
</Columns>

以下是我试图使用的代码。 当我点击编辑按钮时,我希望复选框本身被启用。出于某种原因,当页面重新加载时,复选框根本没有被启用。 我一开始只是尝试启用“Checkbox1”,但最终想启用所有5个复选框。

 protected void grd_Bookcode_RowCommand1(object sender, GridViewCommandEventArgs e)
    {
        if (e.CommandName == "Edit")
        {
            int index = Convert.ToInt32(e.CommandArgument);

            GridViewRow row = grd_Bookcode.Rows[index];

            CheckBox chk = (CheckBox)row.FindControl("CheckBox1");
            chk.Enabled = true;


        }
    }

你使用的代码发生了什么? - James Johnson
这段代码难道不是启用复选框的吗?您能否更清楚地表达问题? - Praveen
什么是问题?什么没有起作用?如果你进行调试,是否能够到达这行代码:CheckBox chk = (CheckBox)row.FindControl("CheckBox1");? - Davide Piras
抱歉,我对问题进行了微小的编辑。Davide,我能够轻松通过那一行代码,编译时也没有错误。问题在于当页面重新加载时复选框无法启用。 - Jeffrey Easley
2个回答

3

如果您希望“Edit”控件与标准控件不同,则应使用“EditItemTemplate”。这将允许编辑行在行的模式更改时拥有不同的控件、值等。

示例:

        <Columns>
            <asp:TemplateField HeaderText="PC">
                <ItemTemplate>
                    <asp:CheckBox ID="CheckBox1" runat="server" Checked='<%# Eval("82_PC").ToString() == "1" ? true:false %>' Enabled="false" />
                </ItemTemplate>
                <EditItemTemplate>
                    <asp:CheckBox ID="CheckBox1" runat="server" Checked="true" Enabled="false" />
                </EditItemTemplate>
            </asp:TemplateField>
        </Columns>

@Zachary非常感谢你!!我已经寻找这个东西很久了,你让它变得简单明了! - Sophia_xoox

1

我猜您可以通过以下方式循环遍历GridView的所有行并启用复选框:

    protected void grd_Bookcode_RowCommand(object sender, GridViewCommandEventArgs e)
    {
        if (e.CommandName == "Edit")
        {
            for (int index = 0; index < GridView1.Rows.Count; index++)
            {
                CheckBox chk = grd_Bookcode.Rows[index].FindControl("CheckBox" + index + 1) as CheckBox;
                chk.Enabled = true;
            }
        }
    }

希望这能有所帮助!

没错,那就是我要做的,但使用edititemtemplate只是更容易实现它的一种方式。 - Jeffrey Easley

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接