我正在开展一个企业项目。因此,有许多用户从数据输入操作员到更高的管理人员。用户帐户分别存储在用户数据表中,并且各自的权限存储在 userprivileges表中。
我的gridview支持交易中的多个表单,我提供了查看,修改,更新选项,如下所示。
<asp:GridView ID="grvId".....>
<Columns>
<asp:BoundField..... />
.
.
<asp:TemplateField AccessibleHeaderText="Edit" HeaderText="Edit">
<ItemTemplate>
<asp:Button ID="btnEdit" runat="server" CausesValidation="false"
CommandName="Edit" Text="Edit" />
</ItemTemplate>
<EditItemTemplate>
<asp:Button ID="btnUpdate" runat="server" CausesValidation="true"
CommandName="Update" Text="Update" />
<asp:Button ID="btnCancel" runat="server" CausesValidation="false"
CommandName="Cancel" Text="Cancel" />
</EditItemTemplate>
</asp:TemplateField>
<asp:ButtonField ButtonType="Button" CommandName="Delete" HeaderText="Delete" Text="Delete" />
</Columns>
</asp:GridView>
我想要做的是,基于会话(用户当前登录),我必须设置编辑和 DELETE <的可见性/ strong> gridview中的功能。
更新:这可以在.Master页面中实现,并且可以从子页面进行调用吗?
答案 0 :(得分:3)
在C#Code-Behind中,检查当前用户并检查Privileges。
确定后,您可以直接隐藏列:
if (!userEdit) {
grvId.Columns[0].Visible = false;
}
其中0
是编辑列的列号(记住集合从0开始),userEdit
变量是关于用户是否可以编辑网格的布尔值设置。
答案 1 :(得分:0)
没有直接回答这个问题,但在这种情况下我会使用CommandField(http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.commandfield%28v=vs.110%29.aspx)而不是多个Button / Template列:
<asp:GridView ID="grvId" ...>
<Columns>
<asp:BoundField..... />
<asp:CommandField ButtonType="Button" />
</Columns>
</asp:GridView>
然后你可以像这样动态显示/隐藏按钮:
protected void Page_Load(object sender, EventArgs e)
{
bool canEdit = isAdmin || isEditor;
bool canDelete = isAdmin;
// fetch the last column, which is the command field
CommandField col = (CommandField)grvId.Columns[grvId.Columns.Count - 1];
col.ShowEditButton = canEdit;
col.ShowDeleteButton = canDelete;
}
当然,您需要使用实际的权限检查替换isAdmin,isEditor等。