Выполните итерацию по списку данных, чтобы установить видимость элемента управления - PullRequest
1 голос
/ 11 февраля 2011

У меня есть список данных и элемент управления гиперссылкой, который содержит URL.Пользователь создает этот список данных через веб-сайт администратора, и не все гиперссылки содержат ссылку на них.Вопрос в том, как скрыть ссылку, у которой нет URL-адреса, в поле базы данных.

код для списка данных:

<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" />&nbsp;<span style="color: #33ff00; font-size: 12pt">@</span>&nbsp;<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();
        }    
    }

1 Ответ

2 голосов
/ 11 февраля 2011

Вы должны использовать событие ItemDataBound для захвата элементов управления, поскольку они привязаны к данным.В этом случае вы можете проверить, существует ли URL-адрес, и, если нет, скрыть элемент управления гиперссылкой.

Практическое руководство. Настройка элементов списка данных во время выполнения:http://msdn.microsoft.com/en-us/library/6y92e1ze(v=VS.100).aspx#Y900

Событие DataList.ItemDataBoundhttp://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.datalist.itemdatabound(v=VS.100).aspx

Например, изменив пример на 2-й ссылке (чуть выше моей головы, а не на C #, так что, возможно, это не совсем точно):

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

        }
    }

В разметке asp сделайте это:

<asp:DataList ID="dtlPromoEvents" runat="server" CellPadding="2" CellSpacing="2" OnItemDataBound="dtlPromoEvents_ItemDataBound" RepeatColumns="1" RepeatDirection="Vertical" RepeatLayout="Table" >
...