asp.net - 在基于角色的gridview中,显示/隐藏列

  显示原文与译文双语对照的内容
0 0

我已经经填充了一个 GridView,并且想要显示/隐藏编辑链接是否是管理员或者用户。 我没有收到任何错误,但无法找出它为什么不工作。

 <asp:GridView ID="RepView" runat="server" HeaderStyle-BackColor="#bfbfbf" HeaderStyle-ForeColor="White" HeaderStyle-Font-Underline="true" CellPadding="2" GridLines="None" AutoGenerateColumns="false" Width="990px">
 <AlternatingRowStyle BackColor="#DCDCDC"/>
 <Columns>
 <asp:BoundField DataField="Id" HeaderText="Id"/>
 <asp:BoundField DataField="FirstName" HeaderText="First Name"/>
 <asp:BoundField DataField="LastName" HeaderText="Last Name"/>
 <asp:BoundField DataField="EmployeeId" HeaderText="Employee Id"/>
 <asp:BoundField DataField="Shift" HeaderText="Shift"/>
 <asp:BoundField DataField="Supervisor" HeaderText="Supervisor"/>
 <asp:BoundField DataField="Center" HeaderText="Center"/>
 <asp:BoundField DataField="DateSubmitted" HeaderText="Date Entered"/>
 <asp:TemplateField ItemStyle-HorizontalAlign="Center" HeaderText="Details">
 <ItemTemplate> 
 <a href="/Admin/Details.aspx?AssignmentID=<%# Eval("Id") %>">Edit</a> 
 </ItemTemplate>
 </asp:TemplateField>
 </Columns>
</asp:GridView>

代码

 Private Sub BindGrid()
 Dim DefaultConnection As String = ConfigurationManager.ConnectionStrings("DefaultConnection").ConnectionString
 Using con As New SqlConnection(DefaultConnection)
 'This is not working...
 If My.User.IsInRole("User") Then
 RepView.Columns(9).Visible = False
 ElseIf My.User.IsInRole("Admin") Then
 RepView.Columns(9).Visible = True
 End If
 ' End of questionable part....
 Using cmd As New SqlCommand()
 cmd.CommandText = ("SELECT * from Reps")
 cmd.Connection = con
 con.Open()
 RepView.DataSource = cmd.ExecuteReader()
 RepView.DataBind()
 con.Close()
 End Using
 End Using
End Sub
时间:原作者:6个回答

0 0

尝试从 private 子 BindGrid() 到gridview_Load事件将你的代码移到"可疑部分"。 我的猜测是,gridview正在加载,然后它获取代码 private BindGrid() 来显示/隐藏列,但是列已经经加载。 即使在运行该代码之后,它仍然会显示列,除非你在加载事件中运行检查并显示/隐藏列。

另一种可能的解决方案是在 private 子目录中,你试图隐藏列,查询在查询之前means列 means columns columns first hide hide hide 。 将有疑问的部分移到sql命令下面。

试试这样的东西。"。

Protected Sub GridView1_RowDataBound(sender As Object, e As System.Web.UI.WebControls.GridViewRowEventArgs) Handles GridView1.RowDataBound
 Dim x As Integer = 0
 If x = 0 Then
 GridView1.Columns(0).Visible = False
 Else
 GridView1.Columns(0).Visible = True
 End If
End Sub

我已经测试过了,使用x = 0将隐藏第一列使用x = 1将显示第一列。

<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" 
 DataKeyNames="ID" DataSourceID="SqlDataSource1">
<asp:SqlDataSource ID="SqlDataSource1" runat="server" 
 ConnectionString="<%$ ConnectionStrings:Sprayer_Parts_CatalogConnectionString %>" 
 SelectCommand="SELECT [ID], [Order#] AS column1, [Gallon], [Price] FROM [Tanks]">
 </asp:SqlDataSource>
原作者:
...