如何在DataGrid中隐藏列?

5

我需要隐藏只有管理员以外的用户在 DataGrid 中的 RevToDate 列。如何仅隐藏这一列?

 <asp:DataGrid runat="server" CssClass="tblResults" OnItemDataBound="dgList_ItemCreated" AllowSorting="true" OnSortCommand="dgCustomer_Sort" ID="dgCustomers" DataKeyField="ID" AutoGenerateColumns="false">
            <HeaderStyle CssClass="tblResultsHeader" />
            <AlternatingItemStyle BackColor="#EEEEEE" />
            <Columns>
                <asp:HyperLinkColumn ItemStyle-CssClass="loading" DataNavigateUrlFormatString="Customer.aspx?CustID={0}" DataNavigateUrlField="ID" DataTextField="AccountCode" HeaderText="A/C Code" SortExpression="AccountCode"></asp:HyperLinkColumn>
                <asp:BoundColumn DataField="CurrencyDesc" HeaderText="Currency" SortExpression="CurrencyDesc"></asp:BoundColumn>
                <asp:BoundColumn DataField="RevToDate" HeaderText="Rev To Date (Net)" SortExpression="RevToDate"></asp:BoundColumn>
                <asp:BoundColumn DataField="CreditLimitAmount" HeaderText="Credit Limit" SortExpression="CreditLimitAmount"></asp:BoundColumn>
                <asp:BoundColumn DataField="DiscountReviewDate" HeaderText="Discount Review Date" SortExpression="DiscountReviewDate" Visible="false"></asp:BoundColumn>
            </Columns>
 </asp:DataGrid

我正在使用这段代码来隐藏特定的项目:

 if (!CurrentUser.IsInRole("Admin"))
    {
        btnDelete.Visible = false;
        btnUpload2.Visible = false;
    }

但我不确定如何隐藏该列。我不能在CSS中将Visible设为false,因为这将使所有用户都无法看到该列。


你不能在CSS中实现它的好理由并不是你提到的那个...如果你在CSS中实现它,所有用户都可以在HTML中看到这些信息,只是在页面呈现时不显示,所以基本上所有用户都可以访问这些信息,这就是问题所在... - Laurent S.
2个回答

9
你可以这样做。
 if (!CurrentUser.IsInRole("Admin"))
 {
     this.dgCustomers.Columns[2].Visible = false;
     btnDelete.Visible = false;
     btnUpload2.Visible = false;
 }

那会隐藏所有的列吗?我只想隐藏第二列(RevToDate)。 - user2026041
@user2026041,您需要在Columns[2]中提及数字以隐藏特定列。 - Rahul Nikate

2

在aspx页面中将它的可见性设置为true:

<asp:BoundColumn visible="true" DataField="RevToDate" HeaderText="Rev To Date (Net)" SortExpression="RevToDate"></asp:BoundColumn>

然后通过代码使其不可见:

if (!CurrentUser.IsInRole("Admin"))
        {
         this.gdCustomers.Columns[2].Visible = false;
         btnDelete.Visible = false;
         btnUpload2.Visible = false;
        }

在您的gridview中,2是列索引。


我不是那个给你点踩的人,但我想解释一下原因。1] 看起来你在这里复制粘贴了代码,因为它与 OP 的问题不匹配。2] Columns[i] 中的 i 是什么?3] OP 想根据用户角色隐藏列。希望这有意义。 - Rahul Nikate
1
你的意思是,我应该把答案喂给你。好的。 - waleedansari
请查看"如何在SO上回答问题" - Rahul Nikate
不好意思,请不要生气。我只是试图在 Stack Overflow 上指导您。这些答案将对未来的用户非常有帮助,因此我们必须非常清楚地表达我们在这里写的内容。 - Rahul Nikate
完全同意。感谢给出正确的方向 :) - waleedansari
显示剩余3条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接