在 ListView ItemTemplate 中设置按钮属性

Setting Button Properties in ListView ItemTemplate

我有一个显示活动预订的 ListView。如果有可用的时间段,我想在该数据项旁边显示一个预订按钮。我已尝试在 OnItemCreated 和 OnItemDataBound 事件处理程序中执行此操作,但均无济于事。

在此特定场景中,有四个结果,所有结果都可用。但是,该按钮仅出现在最后一个结果旁边。好像有什么东西被覆盖了。我尝试在每一轮循环中将 ID 属性 设置为不同的内容,但在运行时失败了。

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

我最初尝试将 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;
    }
}

为了其他人的利益,我能够解决这个问题如下:

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