我有一个gridview控件,其中有两个命令按钮(linkButton),一个是“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
指定的参数超出了有效值的范围。
我该如何正确地做到这一点?
感谢。
答案 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