C# 如何在网格视图中隐藏带有行标题的图像按钮

C# 如何在网格视图中隐藏带有行标题的图像按钮,c#,asp.net,C#,Asp.net,我试图根据用户角色类型在网格中隐藏一列 这是我的c代码 这是html页面 <asp:TemplateField HeaderText="Delete" HeaderStyle-CssClass="grid_header_text"> <ItemTemplate> <asp:ImageButton ID="imgDelete" runat="server" Comma

我试图根据用户角色类型在网格中隐藏一列

这是我的c代码

这是html页面

<asp:TemplateField HeaderText="Delete" HeaderStyle-CssClass="grid_header_text">
     <ItemTemplate>
      <asp:ImageButton ID="imgDelete" runat="server" CommandName="DEL" ImageUrl="~/Image/delete.gif"
      OnClientClick="if(confirm('Budget List Summary \n\n Selected record will be deleted please confirm')==false){event.returnValue=false;return false;}else{return true;}" TabIndex="18" ToolTip="Delete" />
     </ItemTemplate>

 <HeaderStyle CssClass="grid_header_text"></HeaderStyle>
</asp:TemplateField>

根据您记录的错误消息,我假设您有一个GridView。如果是这样的话,像这样的事情难道不能奏效吗


gvBudget.Columns[0]。可见=false

好的,问题是如果我们只是隐藏控件,列仍然呈现。这里的关键是,实际上你的列控件被隐藏了

假设我们有:

我隐藏链接按钮的代码是这样的:

        Dim lb As LinkButton = gv.FindControl("btnLNK")
        lb.Visible = False
然后我们得到:

因此,它确实会将控件“隐藏在”列中,但不会隐藏整个列

所以,你必须隐藏单元格,像这样说:

    If e.Row.RowType = DataControlRowType.DataRow Then
        e.Row.Cells(4).Visible = False
    End If
    If e.Row.RowType = DataControlRowType.DataRow Or
        e.Row.RowType = DataControlRowType.Header Then
        e.Row.Cells(4).Visible = False
    End If
但请注意,他是如何只隐藏数据,而不隐藏标题的

因此,我们必须同时隐藏标题和数据,如下所示:

    If e.Row.RowType = DataControlRowType.DataRow Then
        e.Row.Cells(4).Visible = False
    End If
    If e.Row.RowType = DataControlRowType.DataRow Or
        e.Row.RowType = DataControlRowType.Header Then
        e.Row.Cells(4).Visible = False
    End If
我们得到这个:

看起来不错。你确定user=1?是的,我检查了两次。嗯,好吧,也许试着用样式来隐藏。例如:imgBtn.Style(“显示”)=“无”;我使用了您提到的方法,通过从1开始计算gv列,删除为14,因此它应该类似于gvbudget.column[13]。visible=false;是的,但是我得到了一个例外,因为索引的数量比同样提到的数字还要多。看起来索引[13]太多了。您还可以(我认为)使用列名来获取列索引。例如:gvbudget.Columns[“columnName”]。可见