我有一个带有一些数据和几个 LinkButton 列的 GridView。如果用户没有特定角色,我会从 GridView 中删除其中一个 LinkButton 列。
我的问题是,当我删除列时,RowCommand 事件将不再触发,并且当我单击它们时所有 LinkButtons 都会消失。
注意:我没有在 PostBack 上重新绑定网格,我没有禁用 ViewState,并且我尝试CausesValidation="false"
了没有更改的设置。我在网上找到的每个有这个问题的人都遇到过这些问题之一。
如果我注释掉删除该列的代码,则一切正常。
编辑:如果我隐藏列而不是用 删除它gvMyGrid.Columns(0).Visible = False
,一切正常。
为什么删除该列会阻止该事件触发?
这是我的网格视图:
<asp:GridView ID="gvMyGrid" runat="server" Visible="true" EmptyDataText="Nothing to show." AutoGenerateColumns="false" ShowHeaderWhenEmpty="true" Width="100%" AllowSorting="True">
<HeaderStyle Font-Bold="True" ForeColor="White" Height="15px" BackColor="#46596b" Wrap="False"></HeaderStyle>
<Columns>
<asp:TemplateField HeaderText="">
<ItemStyle HorizontalAlign="Center" VerticalAlign="Middle" Width="25" />
<ItemTemplate>
<asp:LinkButton ID="lnkFirst" CommandName="FirstCommand" CommandArgument='<%# Eval("MyID") %>' runat="server" Text='First'></asp:LinkButton>
</ItemTemplate>
</asp:TemplateField>
<asp:BoundField DataField="data1" HeaderText="Data1"><ItemStyle Width="70px"></ItemStyle></asp:BoundField>
<asp:BoundField DataField="data2" HeaderText="Data2"></asp:BoundField>
<asp:TemplateField HeaderText="">
<ItemStyle HorizontalAlign="Center" VerticalAlign="Middle" Width="25" />
<ItemTemplate>
<asp:LinkButton ID="lnkSecond" CommandName="SecondCommand" CommandArgument='<%# Eval("MyID") %>' runat="server" Text='Second'></asp:LinkButton>
</ItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>
在我后面的代码中:
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
If Not IsPostBack Then
If Session("SpecialRole") <> "First" Then
gvMyGrid.Columns.RemoveAt(0) 'Row Command fires if I comment this out
End If
BindMyGrid()
End If
End Sub