2010-01-27 65 views
2

我有一些数据和两个hyperlinkfields 我想要做的第一行不可见 和最后一排的第二HyperLinkField字段不可见如何更改gridview中超链接字段的可见性?

的第一HyperLinkField字段一个GridView这就是我所做的到现在

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 

这只适用于第一个超链接字段。 省略注释将使第一个超链接字段对所有行都不可见。

任何帮助表示赞赏。 在此先感谢。

回答

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%> 
+0

+1 - 这是做到这一点的方法。不要打扰后面的代码,只是让它自动跟随你的标准。如果需要更复杂的标准,则在后面的代码中通过公共方法运行它。 – 2010-01-28 19:12:53

1

通过查看上面的代码,正如你所提到的那样,当你取消注释了被注释的代码时,它将使第一个超链接字段对所有行都不可见,因为gridview.Rows.Count在它正在触发时每一行。 您应该尝试在调用GridView1.DataBind()的位置执行此操作,意思是在该语句之后,您应该检查总行数,然后查找超链接并禁用它。否则它会隐藏所有的超链接,因为它为每一行触发并且GridView1.Rows.Count正在改变。

OR

如果你想要做的是,在网格视图的RowDataBound事件,那么你可以检查 DataControlRowType.Footer,DataControlRowType.Pager行,然后通过减去1或2得到的最后一排,关于您的需求并获得最后一行。

希望这会有所帮助。