Настройка свойств кнопки в ListView ItemTemplate - PullRequest
0 голосов
/ 18 января 2019

У меня есть ListView, который отображает бронирования событий. Если есть свободный временной интервал, я хочу, чтобы рядом с этим элементом данных была видна кнопка бронирования. Я пытался сделать это в обработчиках событий OnItemCreated и OnItemDataBound, но безрезультатно.

В этом конкретном сценарии есть четыре результата, и все они доступны. Однако кнопка появляется только рядом с последним результатом. Это как что-то перезаписывается. Я попытался установить для свойства ID что-то свое в каждом цикле цикла, но это не удалось во время выполнения.

Я также попытался переключить логику, установив видимость кнопки на «ложь» в разметке изначально - появятся три кнопки и ни одной кнопки рядом с последним элементом данных.

Первоначально я пытался сохранить элемент управления Button в ViewState и получил ошибку «not serializable». Поэтому я перешел на хранение объекта в состоянии сеанса.

Может ли кто-нибудь указать мне правильное направление?

<ItemTemplate>
    ...
    <asp:Button ID="reserveButton" Text="Book Now" Visible="false"
        OnClick="ReserveButton_Click" runat="server" />
</ItemTemplate>

// After the DataBind() method in the search button handler
...
int rowCount = resultsDS.Tables[0].Rows.Count;                  
for (int i = 0; i < rowCount; i++)
{
    if (resultsDS.Tables[0].Rows[i]["Available"].ToString().Contains("Available Time Slots"))
        {
            reserveButton = Session["ReserveButton"] as Button;
            reserveButton.Visible = true;
        }
}
...


protected void ResultsList_ItemCreated(object sender, ListViewItemEventArgs e)
{
    if (e.Item is ListViewItem)
    {
        reserveButton = e.Item.FindControl("reserveButton") as Button; 
        Session["ReserveButton"] = reserveButton;
    }
}

1 Ответ

0 голосов
/ 18 января 2019

Для блага других я смог решить это следующим образом:

    protected void ResultsList_ItemDataBound(object sender, ListViewItemEventArgs e)
    {
        if (e.Item is ListViewItem)
        {
            DataRowView row = (DataRowView)e.Item.DataItem;
            if (row["Available"].ToString().Contains("Available Time Slots"))
            {
                Button reserveButton = e.Item.FindControl("reserveButton") as Button;
                reserveButton.Visible = true;
            }
         }
    }
...