Ahmed
Ahmed

Reputation: 655

How can I disable/hide edit button in gridview control of ASP.net

I have a gridview control in which there are two command buttons (linkButton), one is "select" and the other is "edit", now I have a session variable named as department and it contains values like "WRITING", "EDITING", "ADMIN" etc... Now the thing is I want the edit button to disappear when the department is "WRITING" but when it is "EDITING" or "ADMIN" I want edit button appear.

I was searching some forums for this problem and found this

row.Cells[0].Controls.Clear();

The problem with this code is that it hides the entire command column including "select" and "edit" buttons while I only want to control "edit" button, select should remain visible for all departments.

if I do it like (on row data bound event)

e.row.Cells[0].Controls[1].visible = false OR
e.row.Cells[0].Controls[0].visible = false

Specified argument was out of the range of valid values.

How can I do this properly ?

Thanks.

Upvotes: 1

Views: 20541

Answers (2)

Pilgerstorfer Franz
Pilgerstorfer Franz

Reputation: 8359

First of all - your code does not work because your gridViewCell at index 0 contains only one control. Every CommandButton gets a single cell! Furthermore I am not quite sure why you make use of the RowDataBound event. As you are using a Session-Var this one may not change while binding your rows.

I tried the following piece of code in my pageLoad eventHandler - and it worked out for me:

/// just replace CAPITAL letters with your names and 
/// (Session["department"] == "WRITING") with your boolean expression
gvYOURGV.Columns[INDEXOFSELECTCOLUMN].Visible = (Session["department"] == "WRITING");

In case you do want to have (need to have?) more flexibilty on modifying the appearance of your command columns - you may even consider, changing your command columns to templated columns. Doing so you may have the possibility for this code:

<asp:GridView ID="gvYOURGV" runat="server">
        <Columns>
            <asp:TemplateField ShowHeader="False">
                <ItemTemplate>
                    <asp:LinkButton ID="LinkButton1" 
                        visible='<%# Session["department"] != "WRITING" %>'
                        runat="server" CausesValidation="False" 
                        CommandName="Select" Text="Auswählen"></asp:LinkButton>
                </ItemTemplate>
            </asp:TemplateField>
        </Columns>
    </asp:GridView>

hth

Upvotes: 0

Raoul George
Raoul George

Reputation: 2797

You can use the Visible property in the following way.

        if (Session(mode) == "WRITING")
        {
              (e.Row.FindControl("btnEdit")).Visible = false;

        }

Upvotes: 4

Related Questions