在 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;
}
}
}
我有一个显示活动预订的 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;
}
}
}