2015-10-13 3 views
0

Я использую VB.NETПоказать строки на основе столбца значений жерех ретранслятор/GridView

Я получаю DataTable со следующими столбцами

ID DESC Hyperlink COUNT 

Количество либо 0 или 1

Если счет 0 Мне нужно сделать

NavigateUrl='<%#"~/Create.aspx?ID=" + Eval("ID")%>' Text="Create" 

в столбце гиперссылки

Я не делаю никаких явных операций над событием привязки данных. пути я заселение ретранслятора:

rptrTask.DataSource = PpltDefGrid(Trim(v)) 

где функция просто получить таблицу SQL в момент

rptrTask.DataBind() 

Может кто-то дать мне встроенный код о том, как это сделать? если не какая-либо идея о том, как я могу это сделать с помощью кода позади (с примером пожалуйста)? Я пробовал несколько методов/Container.data .. но не был успешным. Было бы очень полезно помочь.

+0

Что делать, если это 1? – g2000

+0

он не отображает гиперссылку .. просто нужно отобразить остальную часть данных col тогда .. – user2390536

+0

что подсчитывается? вы извлекаете его из базы данных или находите в datatable/dataset – Ansari

ответ

0

я редактирую свой ответ, то в таком случае RowDataBound будет легким выбором для вас.

Измените GridView следующим образом: -

<asp:GridView ID="GridView1" runat="server" OnRowDataBound="GridView1_RowDataBound"> 

Я добавил "OnRowDataBound="GridView1_RowDataBound"

В вашей странице .aspx вы можете написать, как это для hyperlink

<asp:TemplateField HeaderText="Count"> 
    <ItemTemplate> 
     <asp:HyperLink ID="HyperLink1" runat="server" NavigateUrl="#" Text='<%#Eval("ID") %>'></asp:HyperLink> 
    </ItemTemplate> 
</asp:TemplateField> 

В вашем .aspx. vb страницы пишите так: -

Protected Sub GridView1_RowDataBound(sender As Object, e As System.Web.UI.WebControls.GridViewRowEventArgs) Handles GridView1.RowDataBound 
     If e.Row.RowType = DataControlRowType.DataRow Then 
      Dim HyperLink1 As HyperLink = DirectCast(e.Row.FindControl("HyperLink1"), HyperLink) 
      If DataBinder.Eval(e.Row.DataItem, "COUNT") = "0" Then 
       HyperLink1.NavigateUrl = "~/Create.aspx?ID=" + DataBinder.Eval(e.Row.DataItem, "ID") 
      End If 
     End If 
    End Sub 

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

+0

привет, теперь я вижу причину вашего вопроса о счете. count - это значение, возвращаемое sql, которое заполняет ретранслятор. Поэтому, хотя то, что вы дали, является правильным, оно не удовлетворяет моим требованиям для этого экземпляра. Счет сохраняется в столбце и на основе этого значения (0/1) мне нужно отобразить гиперссылку для этой строки. Надеюсь, что это разъяснит сомнения. – user2390536

+0

@ пользователь2390536 Я изменил свой ответ, пожалуйста, проверьте сейчас ....... – Ansari

0

Вы можете использовать событие RowDatBound() сетки в коде позади.

protected void rptrTask_RowDataBound(object sender, GridViewRowEventArgs e) { 
     if (e.Row.RowType == DataControlRowType.DataRow) { 
      HyperLink hl = (HyperLink)e.Row.FindControl("hyperlinkID"); 
      if(DataBinder.Eval(e.Row.DataItem, "COUNT") == "0") 
      { 
      hl.NavigateUrl = "~/Create.aspx?ID=" + DataBinder.Eval(e.Row.DataItem, "ID"); 
      } 
     } 
    } 
0

Я извлекаю логику переменной (bShowURl), чтобы повысить управляемость. Кроме того, добавлена ​​дополнительная проверка для обеспечения наличия гиперссылки.

Protected Sub yourGridview_RowDataBound(sender As Object, e As GridViewRowEventArgs) 

     If e.Row.RowType = DataControlRowType.DataRow Then 
      Dim currentDataItem As yourDataItemDataType = e.Row.DataItem 
      Dim bShowUrl = IIF(currentDataItem.ID = 0, True, False) 

      If bShowUrl Then 
       Dim hyperlink As HyperLink = CType(e.Row.FindControl("yourHyperlinkControlId"), HyperLink) 
       If hyperlink IsNot Nothing Then 
        hyperlink.NavigateUrl = "~/Create.aspx?ID=" + currentDataItem.ID.ToString() 
       End If 
      End If 
     End If 

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