在ListView ItemTemplate

时间:2019-01-18 00:09:24

标签: asp.net listview webforms listviewitem

我有一个ListView显示事件预订。如果有可用的时间段,我想使该数据项旁边的预订按钮可见。我尝试在OnItemCreated和OnItemDataBound事件处理程序中都这样做,但无济于事。

在这种特定情况下,有四个结果,并且所有结果都可用。但是,该按钮仅出现在最后结果旁边。就像某些东西被覆盖了。我尝试将ID属性在每次循环中设置为不同的值,但在运行时失败。

我还尝试通过将按钮在标记中的可见性最初设置为false来翻转逻辑-将出现三个按钮,最后一个数据项旁边没有按钮。

我最初尝试将Button控件存储在ViewState中,但出现“无法序列化”错误。因此,我切换为以Session状态存储对象。

有人可以指出我正确的方向吗?

<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 :(得分:0)

为了他人的利益,我能够按以下方式解决此问题:

forEach