代码之家  ›  专栏  ›  技术社区  ›  IrishChieftain

在ListView项模板中设置按钮属性

  •  0
  • IrishChieftain  · 技术社区  · 7 年前

    我有一个显示活动预订的列表视图。如果有可用的时间段,我希望在该数据项旁边显示预订按钮。我在OnitemCreated和OnitemDataBound事件处理程序中都尝试过这样做,但没有任何效果。

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

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

    我最初尝试在viewstate中存储按钮控件,但得到了“不可序列化”错误。所以我切换到在会话状态下存储对象。

    有人能给我指个方向吗?

    <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 回复  |  直到 7 年前
        1
  •  0
  •   IrishChieftain    7 年前

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

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