我的ASP.NET頁面上有一個數據綁定中繼器。我正在使用中繼器來構建一個元素列表,每個元素都包含一個文本(由數據綁定表中的列給出),可以超鏈接到另一個頁面。是否應包含超鏈接由數據綁定表中的另一列確定。數據綁定中繼器項的可選超鏈接
我不知道如何解決這個問題。我應該使用顯示還是隱藏的HyperLink服務器控件,具體取決於第二列中的值嗎?那麼我怎麼能改變這個控制器的Visible屬性,用於中繼器中的每個項目?有更好的方法嗎?
謝謝。標籤和ASP:
我的ASP.NET頁面上有一個數據綁定中繼器。我正在使用中繼器來構建一個元素列表,每個元素都包含一個文本(由數據綁定表中的列給出),可以超鏈接到另一個頁面。是否應包含超鏈接由數據綁定表中的另一列確定。數據綁定中繼器項的可選超鏈接
我不知道如何解決這個問題。我應該使用顯示還是隱藏的HyperLink服務器控件,具體取決於第二列中的值嗎?那麼我怎麼能改變這個控制器的Visible屬性,用於中繼器中的每個項目?有更好的方法嗎?
謝謝。標籤和ASP:
您可以有兩個控件。一個是超鏈接,一個是常規標籤或文字。然後,在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
1 Firest方法
是的,你的ASP添加hyerlink到您的模板,並在的ItemDataBound,您可以訪問您的數據,並調整超鏈接和標籤可見。
2第二種方法(快速)
或調整物業Visible
基於C#表達
爲了您Hyperelink(只是樣品)Eval.DataBinder
您可以設置可見的屬性,在轉發這樣的:
<asp:HyperLink ID="lnk" runat="server" Visible='<%# Boolean.Parse(Eval("IsVisible").ToString()) %>' />
試試這個:
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;
}
}
}
使用直放站的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;
}
}
}
我更喜歡在這種簡單的事情中做標記,因爲測試,修改和適應未來的變化更容易。
下面是如何做到這一點的例子 - 假設我綁定到對象的集合與Name
,一個ShouldWeCreateLink
和Address
屬性:
<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
或儘可能多從代碼隱藏中編程訪問其屬性。
感謝所有回答。許多答案都是相似的,所以我接受了我認爲最清楚和最重要的那個人是正確的。 – CesarGon