2010-01-27 3 views
2

У меня есть GridView с некоторыми данными и два hyperlinkfields я хочу сделать первый hyperlinkfield первой строки не виден и второго 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

Если видимость основана на значении данных, вы можете использовать атрибут Visible в объекте HyperLink.

  <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> 

Вы также можете использовать оператор if внутри файла aspx для отображения 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 - Это способ сделать это. Не беспокойтесь, заходите в код позади, просто имейте autobind по вашим критериям. Если необходимы более сложные критерии, запустите его через открытый метод в коде. –

1

Просмотрев приведенный выше код, как вы упомянули, когда вы раскомментируете код, который прокомментирован, он сделает первое гиперссылку невидимым для всех строк, так как gridview.Rows.Count меняется, поскольку он стреляет для каждая строка. Вам следует попытаться сделать это, когда вы вызываете GridView1.DataBind(), после этого утверждения вы должны проверить общие строки, а затем найти гиперссылку и отключить ее. в противном случае он скроет все гиперссылки в качестве их стрельбы для каждой строки, а GridView1.Rows.Count изменится.

ИЛИ

Если вы хотите сделать это в RowDataBound событие в виде сетки, то вы можете проверить на DataControlRowType.Footer, DataControlRowType.Pager подряд, а затем получить последнюю строку вычитанием 1 или 2, в отношении вашей потребности и получения последней строки.

Надеюсь, что это поможет.

Смежные вопросы