如何在GridView中更改超链接字段的可见性?

3

我有一个带有数据和两个超链接字段的网格视图

我想让第一行的第一个超链接字段不可见,并且最后一行的第二个超链接字段也不可见

目前为止,我已经做了以下工作:

Protected Sub GridView1_RowDataBound(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewRowEventArgs) Handles GridView1.RowDataBound
    If e.Row.RowType = DataControlRowType.DataRow Then
        Dim x As HyperLink
        x = e.Row.Cells(8).Controls(0)

        If e.Row.RowIndex = 0 Then
            x.Visible = False
        End If

        If e.Row.RowIndex = GridView1.Rows.Count Then
            'x = e.Row.Cells(9).Controls(0)
            'x.Visible = False
        End If
    End If
End Sub

这只对第一个超链接字段有效。省略注释将导致所有行中第一个超链接字段不可见。 非常感谢任何帮助。提前致谢。
2个回答

1
如果可见性是基于数据值的,您可以在HyperLink对象中使用Visible属性。
           <asp:TemplateField HeaderText="Header" SortExpression="Field">
            <ItemTemplate>
              <asp:HyperLink ID="HyperLink1" runat="server" navigateUrl='http://www.google.com' Text='Google'
                    Visible='<%# Eval("flagShowLink") = "Yes"%>'></asp:HyperLink>
            </ItemTemplate>
           </asp:TemplateField>

你也可以在 aspx 文件中使用 if 语句来显示 HyperLink。

<%If Session("Access") > 6 Then%>
  <asp:HyperLink ID="HyperLink1" runat="server" navigateUrl='http://www.google.com' Text='Google'></asp:HyperLink>
<%End If%>

+1 - 这是正确的做法。不必深入了解代码,只需将其自动绑定到您的条件即可。如果需要更复杂的条件,则通过代码后台中的公共方法运行它。 - Joel Etherton

1
通过查看上面的代码,正如你所提到的,当你取消注释的代码时,它会使所有行的第一个超链接字段不可见,因为 gridview.Rows.Count 正在为每一行触发更改。你应该尝试在调用 GridView1.DataBind() 时执行它,在这个语句之后你应该检查总行数,然后找到超链接并禁用它。否则,它将隐藏所有超链接,因为它会为每一行触发,并且 GridView1.Rows.Count 正在更改。
或者,如果你想在网格视图的 RowDataBound 事件中执行此操作,那么可以检查 DataControlRowType.Footer,DataControlRowType.Pager 行,然后通过减去 1 或 2 来获取最后一行,根据你的需要获取最后一行。
希望能帮助到你。

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