如何在gridview中禁用行数据绑定事件中的按钮?

时间:2015-10-14 11:00:50

标签: c# asp.net gridview

我想在行数据绑定中禁用按钮。当其文字或价值为“等待批准”时。我得到这个错误。对象引用未设置为对象的实例.// button.Enabled = true;

protected void GridCategoryWise_RowDataBound(object sender, GridViewRowEventArgs e)
    {

        if (e.Row.RowType != DataControlRowType.DataRow)
        {
            return;
        }

        Button button = (Button)e.Row.FindControl("btnReportedlink");

        string Id =((DataRowView)e.Row.DataItem)["ReportLinks"].ToString();

        if (Id == "Waiting for Approval")
        {
            button.Enabled = false;
        }
        else
        {
            button.Enabled = true;
        }

    }

我的aspx

<asp:TemplateField HeaderText="Reportd Link"  ItemStyle-HorizontalAlign="center" >
     <ItemTemplate>
         <button onclick="window.open('<%#Eval("ReportLinks")%>', '_blank');" title='<%#Eval("ReportLinks")%>' id="btnReportedlink" runat="server"> Link</button>
         </ItemTemplate>
    <ItemStyle HorizontalAlign="Left" />
</asp:TemplateField>

2 个答案:

答案 0 :(得分:3)

为什么使用HTML <button />元素?使用来自asp.net的<asp:button /> Web服务器控件来更好地控制读取和禁用服务器控件。

使用OnClientClick属性指定在引发Button控件的Click事件时执行的其他客户端脚本。

<ItemTemplate>
   <asp:button onclientclick="javascript:window.open('<%#Eval("ReportLinks")%>', '_blank');"
        text='<%#Eval("ReportLinks")%>'   id="btnReportedlink" runat="server"/>
</ItemTemplate>

通过上面的设置,现在您将能够访问行数据绑定事件中的button,而不会出现更多对象引用错误。

答案 1 :(得分:0)

使用 DataBinder 正常工作

protected void GridCategoryWise_RowDataBound(object sender, GridViewRowEventArgs e)
    {

        if (e.Row.RowType != DataControlRowType.DataRow)
        {
            return;
        }

        Button button = (Button)e.Row.FindControl("btnReportedlink");

    string Id = Convert.ToInt32(DataBinder.Eval(e.Row.DataItem, "ReportLinks"));

        if (Id == "Waiting for Approval")
        {
            button.Enabled = false;
        }
        else
        {
            button.Enabled = true;
        }

    }