简体   繁体   中英

How to disable button in row databound event in gridview?

i want to disable button in row data bound . when its text or value is 'Waiting for Approval'. im getting this error . Object reference not set to an instance of an object.// 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;
        }

    }

my 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>

Why are you using the HTML <button /> element ? use <asp:button /> web server control from asp.net for a better control over reading and disabling the server controls.

Use the OnClientClick property to specify additional client-side script that executes when a Button control's Click event is raised.

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

With the above setup, now you will be able to access the button in row data bound event with NO more object references error.

use DataBinder work fine

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;
        }

    }

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM