如何在ASP.net的gridview控件中禁用/隐藏编辑按钮

时间:2011-11-04 06:58:24

标签: asp.net gridview hide edit

我有一个gridview控件,其中有两个命令按钮(linkBut​​ton),一个是“select”,另一个是“edit”,现在我有一个名为department的会话变量,它包含像“WRITING”这样的值, “编辑”,“管理”等...现在问题是当部门是“写作”时我想要编辑按钮消失但是当它是“编辑”或“管理员”时我想要编辑按钮出现。

我正在寻找一些论坛来解决这个问题并找到了这个

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

此代码的问题在于它隐藏了整个命令列,包括“选择”和“编辑”按钮,而我只想控制“编辑”按钮,选择应该对所有部门保持可见。

如果我这样做(在行数据绑定事件上)

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

指定的参数超出了有效值的范围。

我该如何正确地做到这一点?

感谢。

2 个答案:

答案 0 :(得分:4)

您可以通过以下方式使用Visible属性。

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

        }

答案 1 :(得分:0)

首先 - 您的代码不起作用,因为索引0处的gridViewCell只包含一个控件。每个CommandButton都有一个单元格!此外,我不太清楚为什么要使用RowDataBound事件。当您使用Session-Var时,绑定行时可能不会更改。

我在pageLoad eventHandler中尝试了以下代码 - 这对我来说很有用:

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

如果你想要修改命令列的外观(需要有?)更灵活 - 你甚至可以考虑将命令列更改为模板化列。这样做你可能有这个代码:

<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