Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/325.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/29.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在GridView中启用和禁用按钮_C#_Asp.net_Data Binding_Gridview_Button - Fatal编程技术网

C# 在GridView中启用和禁用按钮

C# 在GridView中启用和禁用按钮,c#,asp.net,data-binding,gridview,button,C#,Asp.net,Data Binding,Gridview,Button,我在gridview中添加了一个按钮列。我通过代码向gridview填充一个数据表,然后将数据表绑定到网格 我现在需要查看数据的第一列,并检查该列的文本是否为“NA”,如果该列中的按钮必须禁用 我怎样才能做到这一点?我从代码中填充数据,按钮被预先添加到标记中的网格中 <asp:GridView ID="GridView1" runat="server" OnRowCommand="GridView1_RowCommand"> <Columns> &

我在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();

GridView1.DataSource=dt;
GridView1.DataBind();

也许您可以使用OnRowDataBound=“GridViewRowEventHandler”将值设置为enabled或disabled?

在数据绑定事件处理程序中尝试以下操作:

protected void GridView1_DataBound(object sender, EventArgs e)
{

    for (int i = 0; i < GridView1.Rows.Count; i++)
    {

        if (GridView1.Rows[i].Cells[1].Text == "NA")
        {
          // Disable the button
        }
    }
}
受保护的void GridView1\u数据绑定(对象发送方,事件参数e)
{
对于(int i=0;i
这只是一个大概的想法。您必须修改应用程序的代码

不要忘记将
OnDataBound=“GridView1\u DataBound”
添加到GridView的标记中。

可能是这样的。 按钮是否有点不同

<asp:GridView ID="GridView1" runat="server" OnRowCommand="GridView1_RowCommand">
    <Columns>
        <asp:TemplateField>
            <ItemTemplate>
                <asp:Button runat="server" ID="Btn_Delete" CommandName="Delete" Text="delete" 
                    Enabled='<%# GridView1.Rows[0].Cells[1].Text != "NA" %>' />
            </ItemTemplate>
        </asp:TemplateField>
    </Columns>
</asp:GridView>


您很可能希望您评估(“someColumn”)而不是GridView1.Rows[0]。Cells[1]。Text

最好的方法是为
TemplateColumn
中的
按钮实现
OnDataBinding
方法

例如:

与其他张贴的答案相比,采用这种方式的优势在于:

  • 标记中没有代码
  • 代码被本地化到按钮控件,如果其他按钮需要相同的功能,则可以重用代码
  • 数据源
    值进行比较,而不是与可视化输出进行比较(这可能与呈现和检查的业务逻辑相关联)

  • 希望对您有所帮助。

    您可以从标记中尝试

     <asp:TemplateField HeaderText="QA signature">
                                         <EditItemTemplate>
                                             <asp:TextBox ID="TextBox2" runat="server" Text='<%# Bind("Column6") %>'></asp:TextBox>
                                         </EditItemTemplate>
                                         <ItemTemplate>
                                             <asp:Label ID="Label3" runat="server" Text='<%# Eval("Column6") %>' Visible='<%# Eval("Column6") != "" %>'  ></asp:Label>
                                             <asp:Button ID="Button2" runat="server" Text="Sign Off" CssClass="cmdButton" Visible='<%# Eval("Column6") == "" %>'  />
                                         </ItemTemplate>
                                     </asp:TemplateField>
    
    
    
    不错的选择。但需要指出的是,您已经硬编码了行[0]。您可能希望在相应的行上启用/禁用,而不是每次都在第一行:)是的,当然。我这样做是因为Nick没有向我们提供完整的代码。因此Eval(“DatabaseColumn”)可能会根据具体情况而工作,我猜只是上面的C#有一个语法错误…后面缺少()toString@mickey谢谢旧帖子,但我修复了:)希望它有用。我尝试按照凯尔西的建议实现,但我有一个DataGrid而不是GridView。我收到此运行时错误:解析器错误消息:System.Web.UI.WebControl.DataGridColumnCollection必须具有“System.Web.UI.WebControl.DataGridColumn”类型的项asp:TemplateField的类型为“System.Web.UI.WebControl.TemplateField”,所以我想我必须改用它
    protected void btnDelete_DataBinding(object sender, System.EventArgs e)
    {
        Button btn = (Button)(sender);
        btn.Enabled = !Eval("TheFieldInYourDataSourceToCompare").ToString().Equals("NA");
    }
    
     <asp:TemplateField HeaderText="QA signature">
                                         <EditItemTemplate>
                                             <asp:TextBox ID="TextBox2" runat="server" Text='<%# Bind("Column6") %>'></asp:TextBox>
                                         </EditItemTemplate>
                                         <ItemTemplate>
                                             <asp:Label ID="Label3" runat="server" Text='<%# Eval("Column6") %>' Visible='<%# Eval("Column6") != "" %>'  ></asp:Label>
                                             <asp:Button ID="Button2" runat="server" Text="Sign Off" CssClass="cmdButton" Visible='<%# Eval("Column6") == "" %>'  />
                                         </ItemTemplate>
                                     </asp:TemplateField>