2012-08-29 39 views
0

我的ASP.NET頁面上有一個數據綁定中繼器。我正在使用中繼器來構建一個元素列表,每個元素都包含一個文本(由數據綁定表中的列給出),可以超鏈接到另一個頁面。是否應包含超鏈接由數據綁定表中的另一列確定。數據綁定中繼器項的可選超鏈接

我不知道如何解決這個問題。我應該使用顯示還是隱藏的HyperLink服務器控件,具體取決於第二列中的值嗎?那麼我怎麼能改變這個控制器的Visible屬性,用於中繼器中的每個項目?有更好的方法嗎?

謝謝。標籤和ASP:

+0

感謝所有回答。許多答案都是相似的,所以我接受了我認爲最清楚和最重要的那個人是正確的。 – CesarGon

回答

0

您可以有兩個控件。一個是超鏈接,一個是常規標籤或文字。然後,在ItemDataBound事件中,根據第二列的值顯示/隱藏適當的控件。請參閱下面的示例代碼。顯然你需要改變它以適應你的情況。

Private Sub Repeater_ItemDataBound(ByVal sender As Object, Byval e As RepeaterItemEventArgs) 
    If (e.Item.ItemType Is ListItemType.Item) Or (e.Item.ItemType Is ListItemType.AlternatingItem) Then 
    Dim hyperlink = CType(e.Item.FindControl("HyperLink1"), HyperLink) 
    Dim label = CType(e.Item.FindControl("Label1"), Label) 
    Dim dataSource = CType(e.Item.DataItem, MyDataSourceObject) 

    If (dataSource.HyperLink = String.Empty) Then 
     hyperlink.visible = false 
    Else 
     label.visible = false 
     hyperlink.NavigateUrl = dataSource.HyperLink 
    End If 
    End If 
End Sub 
0

1 Firest方法

是的,你的ASP添加hyerlink到您的模板,並在的ItemDataBound,您可以訪問您的數據,並調整超鏈接和標籤可見。

2第二種方法(快速)

或調整物業Visible基於C#表達

爲了您Hyperelink(只是樣品)Eval.DataBinder

0

您可以設置可見的屬性,在轉發這樣的:

<asp:HyperLink ID="lnk" runat="server" Visible='<%# Boolean.Parse(Eval("IsVisible").ToString()) %>' /> 
0

試試這個:

void Repeater1_ItemDataBound(Object Sender, RepeaterItemEventArgs e) { 

      // Execute the following logic for Items and Alternating Items. 
      if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem) { 
      DataRowView row = e.Item.DataItem as DataRowView; 
      if (row["ColumnName2"] == "Something") { 
       ((HyperLink)e.Item.FindControl("HyperLink1")).NavigateUrl= row["ColumnName1"]; 
      } 
      else 
      { 
       ((HyperLink)e.Item.FindControl("HyperLink1")).Visible = False; 
      } 
      } 
     } 
0

使用直放站的ItemDataBound命令..

void repeater_ItemDataBound(Object Sender, RepeaterItemEventArgs e) 
    {       
     DataRowView row = (DataRowView)e.Item.DataItem; 

     if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType ==ListItemType.AlternatingItem) 
     {    
      if(row["othercolumnName"].ToString()==true)//You can check the value here..use your logic 
      { 
       LinkButton lnk=(LinkButton)e.Item.FindControl("lnkID"); 
       lnk.Visible=False; 
      } 
     } 
    }  
0

我更喜歡在這種簡單的事情中做標記,因爲測試,修改和適應未來的變化更容易。

下面是如何做到這一點的例子 - 假設我綁定到對象的集合與Name,一個ShouldWeCreateLinkAddress屬性:

<ItemTemplate> 
     <tr> 
      <td> 
       <%--Bind to Name Property--%> 
       <%# Eval("Name") %> 
      </td> 
      <%--Should we show a hyperlink or a simple text with the address?--%> 
      <td> 
       <%# Eval("ShouldWeCreateLink").ToString() == "True" ? string.Format("<a href=\"Link.aspx?ID={0}\">{1}</a>", Eval("ID"),"Click me") : Eval("Address")%> 
      </td> 
     </tr> 
    </ItemTemplate> 

以上會產生這樣當它的超鏈接需要創建一個超鏈接:

<a href="link.aspx?ID=9">Click me</a>

避免,你可以使用服務器控件,除非你需要ViewState或儘可能多從代碼隱藏中編程訪問其屬性。