在GridView中启用和禁用按钮

Nic*_*rca 4 c# asp.net data-binding gridview button

我在gridview中添加了一个按钮列.我正在使用数据通过代码填充gridview,然后将数据绑定到网格.

我现在需要查看数据的第一列,并检查列的文本是否为"NA",如果它是该列中的按钮必须被禁用.....

我怎么能做到这一点?我正在从代码中填充数据,并且按钮被预先添加到标记中的网格中

<asp:GridView ID="GridView1" runat="server" OnRowCommand="GridView1_RowCommand">
    <Columns>
        <asp:ButtonField Text="Delete" />
    </Columns>
</asp:GridView>


GridView1.DataSource = dt;
GridView1.DataBind();
Run Code Online (Sandbox Code Playgroud)

Kel*_*sey 5

最好的OnDataBinding办法是Button在a中实现a的方法TemplateColumn.

例如:

<asp:GridView ID="GridView1" runat="server" OnRowCommand="GridView1_RowCommand">
    <Columns>
        <asp:TemplateField>
            <ItemTemplate>
                <asp:Button runat="server" ID="btnDelete" CommandName="Delete" 
                    Text="Delete" OnDataBinding="btnDelete_DataBinding" />
            </ItemTemplate>
        </asp:TemplateField>
    </Columns>
</asp:GridView>
Run Code Online (Sandbox Code Playgroud)

然后在你的代码隐藏中实现你的逻辑:

protected void btnDelete_DataBinding(object sender, System.EventArgs e)
{
    Button btn = (Button)(sender);
    btn.Enabled = !Eval("TheFieldInYourDataSourceToCompare").ToString().Equals("NA");
}
Run Code Online (Sandbox Code Playgroud)

以这种方式对其他已发布的答案执行此操作的优势:

  1. 标记中没有代码
  2. 代码已本地化到Button控件,如果其他Buttons需要相同的功能,则可以重复使用.
  3. 比较DataSource值而不是视觉输出(这可能与渲染和检查的业务逻辑相关).

希望有所帮助.