2010-01-27 57 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得到的最後一排,關於您的需求並獲得最後一行。

希望這會有所幫助。