我有一個datalist和一個超鏈接控件,它包含一個url。用戶通過管理網站創建這個數據列表,並不是所有的超鏈接都有鏈接。問題是如何隱藏數據庫字段中沒有url的鏈接。爲DataList遍歷數據列表來設置控件的可見性
代碼:
<asp:DataList ID="dtlPromoEvents" runat="server" CellPadding="2" CellSpacing="2" RepeatColumns="1" RepeatDirection="Vertical" RepeatLayout="Table" >
<ItemTemplate>
<asp:Label ID="lblPromoHeading" runat="server" Text='<%# Eval("eventHeading") %>' Font-Size="12pt" ForeColor="#FFFF00" />
<br />
<br />
<asp:Label ID="promoDate" runat="server" Text='<%# Eval("eventDate", "{0:D}") %>' Font-Size="11pt" ForeColor="#33FF00" /> <span style="color: #33ff00; font-size: 12pt">@</span> <asp:Label ID="lblPromoTime" runat="server" Text='<%# Eval("startTime", "{0:t}") %>' Font-Size="11pt" ForeColor="#33FF00" />
<br />
<br />
<asp:Label ID="lblPromoDetails" runat="server" Text='<%# Eval("eventDetails") %>' Font-Size="11pt" />
<br />
<br />
<br />
<asp:HyperLink ID="eventLink" Text="Check this out!" CssClass="linkEvent" Visible="false" runat="server" Target="_blank" ToolTip="click to go check out what's happening!" NavigateUrl='<%# Eval("eventLink") %>' />
<br />
<br />
<br />
<hr style="width: 480px; height: 1px; background-color: #ff9900; border-color: #ff9900" />
<br />
</ItemTemplate>
</asp:DataList>
在後面我將用代碼的數據源,現在我難倒就如何實現到項,並控制「看看這個」鏈接的可見性代碼根據db字段是否有鏈接。
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
dtlPromoEvents.DataSource = LoadEvents();
//filter through the events and turn on visibility for the events that have a live link.
dtlPromoEvents.DataBind();
}
}
public static DataSet LoadEvents()
{
DataSet eventInfo = new DataSet();
string connectionString = ConfigurationManager.AppSettings["ConnectBeerGeeksDb"];
using (SqlConnection selectConnInfo = new SqlConnection(connectionString))
{
SqlDataAdapter adapterInfo = new SqlDataAdapter("SELECT [eventDate], [startTime], [eventHeading], [eventDetails], [eventLink] FROM [promoEvent] WHERE (eventDate + 1 > GETDATE()) ORDER BY eventDate", selectConnInfo);
selectConnInfo.Open();
eventInfo.Clear();
adapterInfo.Fill(eventInfo);
selectConnInfo.Close();
}
return eventInfo;
}
任何意見,將不勝感激。
感謝,
rjsteward
增加,在這個URL工作的細化代碼:[http://beergeekspub.com/events.aspx][1]
protected void dtlPromoEvents_ItemDataBound(object sender, DataListItemEventArgs e)
{
if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
{
// Retrieve the Hyperlink control in the current DataListItem.
HyperLink eLink = (HyperLink)e.Item.FindControl("eventLink");
// Check if a URL exists, if not then hide the control
if (string.IsNullOrEmpty(eLink.NavigateUrl))
{
eLink.Visible =false;
}
}
}
也頁加載數據綁定數據列表 -
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
dtlPromoEvents.DataSource = LoadEvents();
dtlPromoEvents.DataBind();
}
}
@Shawn,因爲我做了這種事情已經有一段時間了,但我不相信超鏈接會分配值。由於綁定正在發生。 e.Item.DataItem將給出當前的「行」。所以我們應該看看數據是否存在,而不是NavigateURL屬性。 e.Item.DataItem將是DataRowView類型(我認爲),因此((DataRowView)e.Item.DataItem)[「eventLink」]將給出當前行的特定列。如果是DBNull,則在您的示例中隱藏eLink控件。 – 2011-02-11 04:48:51