使用Checkbox启用/禁用GridView的ButtonField

时间:2014-03-24 09:41:47

标签: asp.net gridview c#-3.0

我有网格视图

  • 一列是ItemTemplate列,其中包含Checkbox字段。
  • 其他2列是数据绑定列。一列是ButtonField,它是Button类型。

我希望此按钮最初设置为禁用模式

选中复选框后,应该启用特定的行按钮字段。任何人都可以帮忙吗?

我的示例尝试

.aspx文件

<asp:SqlDataSource ID="SqlDataSource1" runat="server" 
        ConnectionString="<%$ ConnectionStrings:Email_NotificationConnection %>" 
        SelectCommand="SELECT [Customer_Name] FROM [Customer]"></asp:SqlDataSource>
    <asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" 
        DataSourceID="SqlDataSource1" EnableModelValidation="True">
        <Columns>
            <asp:BoundField DataField="Customer_Name" HeaderText="Customer_Name" 
                SortExpression="Customer_Name" />
            <asp:TemplateField>

            <ItemTemplate>
            <asp:CheckBox runat="server" ID="non_prod_all_select" OnCheckedChanged="CheckBox2_CheckedChanged1"  />
                                        </ItemTemplate>
                                      <HeaderStyle Width="30px" /></asp:TemplateField>
            <asp:ButtonField ButtonType="Button" CommandName="Edit" Text="Button" />
        </Columns>
    </asp:GridView>

.aspx.cs文件

  protected void CheckBox2_CheckedChanged1(Object sender, EventArgs e)
{
    CheckBox chk = (CheckBox)sender;
    GridViewRow gridrow = ((GridViewRow)(chk.Parent));
    if (chk.Checked)
    {
        Button btn = (Button)(gridrow.FindControl("Button"));
        btn.Enabled = true;
    }
    else
    {
        Button btn = (Button)(gridrow.FindControl("Button"));
        btn.Enabled = false;
    }
}

1 个答案:

答案 0 :(得分:1)

尝试使用以下代码:

GridView1的ASPX代码:

<asp:SqlDataSource ID="SqlDataSource1" runat="server" 
        ConnectionString="<%$ ConnectionStrings:Email_NotificationConnection %>" 
        SelectCommand="SELECT [Customer_Name] FROM [Customer]"></asp:SqlDataSource>
    <asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" 
        DataSourceID="SqlDataSource1" EnableModelValidation="True">
        <Columns>
            <asp:BoundField DataField="Customer_Name" HeaderText="Customer_Name" 
                SortExpression="Customer_Name" />
            <asp:TemplateField>

            <ItemTemplate>
            <asp:CheckBox runat="server" AutoPostBack="true" ID="non_prod_all_select" OnCheckedChanged="CheckBox2_CheckedChanged1"  />
            </ItemTemplate>
             <HeaderStyle Width="30px" /></asp:TemplateField>
            <asp:TemplateField>
            <ItemTemplate>
                <asp:Button ID="Button1" runat="server" Text="Button" Enabled="false" />
            </ItemTemplate>
        </asp:TemplateField>
        </Columns>
    </asp:GridView>

Code Behind(对于CheckBox Check Changed事件处理程序):

protected void CheckBox2_CheckedChanged1(object sender, EventArgs e)
        {
            foreach (GridViewRow row in GridView3.Rows)
            {
                ((Button)row.FindControl("Button1")).Enabled = ((CheckBox)row.FindControl("non_prod_all_select")).Checked;

            }
         }

所做的更改:

1.将CheckBox的AutoPostBack设置为true。

2.删除Button Field并在Grid的第三列中添加一个带按钮的模板字段(以便在后面的代码中轻松读取asp:Button控件)

3.更改代码背后的代码以执行必要的操作。

注意:我已在本地检查此代码并按预期工作。所以只需用这个替换旧代码,如有任何问题,请告诉我。