【问题标题】:chech/uncheck all checkboxes in ListView with onItemDataBound使用 onItemDataBound 选中/取消选中 ListView 中的所有复选框
【发布时间】:2014-10-20 19:32:51
【问题描述】:

我有一个 ListView,其中创建了 OnItemDataBound 的 pdf 缩略图。每个缩略图都有一个复选框来选择我要上传的页面。一切正常 - 到目前为止。现在我制作了另一个复选框来选择所有页面,问题是:如果我选中该复选框,我的 ListView 中的所有预览缩略图都会消失

这是我的列表视图:

<asp:ListView ID="pdfPagesListView" runat="server" OnItemDataBound="pdfPagesListView_ItemDataBound">  
    <ItemTemplate>
        <div id="pdfFrameDiv" runat="server" class="pdfPage"><%# Container.DataItem %> 
            <div style="position:absolute;">
                <asp:Image ID="pdfPreviewImage" runat="server" /> 
            </div>                             
            <div style="position:relative;height:188px;background-color:rgb(240,240,240)">  
                <asp:Panel ID="thumbnails" runat="server" /> 
            </div>                                              
            <div style="position:relative; top:-14px; left:120px;">
                <asp:CheckBox ID="selectPdfPageCheckbox" runat="server" />
            </div>
        </div>
    </ItemTemplate>
</asp:ListView>

这是我的复选框

<asp:checkbox ID="selectAllPages" runat="server" AutoPostBack="true" OnCheckedChanged="selectAllPdfPages" />

这是ListView的OnItemDataBound代码:

protected void pdfPagesListView_ItemDataBound(object sender, ListViewItemEventArgs e)
{
    if (e.Item.ItemType == ListViewItemType.DataItem)
    {
        if (byteArray.Length < 25000000)
        {
            ListViewDataItem dataItem = (ListViewDataItem)e.Item;
            int i = dataItem.DisplayIndex;

            if (Session["computedPages"] != null)
            {
                int[] computedPages = (int[])Session["computedPages"];
                if (computedPages[i] == 1)
                {
                    dataItem.Visible = false;
                }
            }                

            try
            {
                Panel thumbnailPanel = (Panel)e.Item.FindControl("thumbnails");
                Thumbnail thumbnail = new Thumbnail();
                thumbnail.SessionKey = unique;
                thumbnail.Index = i + 1;
                thumbnail.DPI = 17;
                thumbnail.Width = 200;
                thumbnailPanel.Controls.Add(thumbnail);

                Image pdfPreviewImage = (Image)e.Item.FindControl("pdfPreviewImage");
                pdfPreviewImage.Visible = false;
            }
            catch (Exception ex)
            {
                Image pdfPreviewImage = (Image)e.Item.FindControl("pdfPreviewImage");
                pdfPreviewImage.ImageUrl = "~/img/pdfPreview.jpg";
            }

        }

        else
        {
            Image pdfPreviewImage = (Image)e.Item.FindControl("pdfPreviewImage");
            pdfPreviewImage.ImageUrl = "~/img/pdfPreview.jpg";
        }
    }
}

这是我选中/取消选中复选框事件的代码:

protected void selectAllPdfPages(object sender, EventArgs e)
{
    if (selectAllPages.Checked == true)
    {
        foreach (ListViewDataItem item in pdfPagesListView.Items)
        {
            CheckBox cb = (CheckBox)(item.FindControl("selectPdfPageCheckbox"));
            cb.Checked = true;
        }
    }

    else
    {
        foreach (ListViewDataItem item in pdfPagesListView.Items)
        {
            CheckBox cb = (CheckBox)(item.FindControl("selectPdfPageCheckbox"));
            cb.Checked = false;
        }

    }

}

这是我的页面在 OnItemDataBound 事件之后的样子:

选中 selectAllPages 复选框后的外观如下:

我想选中/取消选中所有复选框,而不会丢失所有缩略图预览。我希望任何人都可以帮助我...

提前致谢

【问题讨论】:

  • 我想我知道它发生的原因,但不知道如何解决这个问题。原因是您将缩略图控件动态添加到页面。每次回帖时,应将动态添加的控件再次添加到控件树中。在您的情况下,这不会发生,因为您在数据绑定期间添加它们,这只发生一次。要解决这个问题,要么切换到客户端解决方案,要么在标记中声明缩略图,或者作为最后的手段,想办法在每个回帖中添加它们(但请不要)

标签: c# asp.net listview checkbox itemdatabound


【解决方案1】:

你为什么不想在客户端使用 jQuery 来实现呢?这将允许您检查/取消选中您的复选框,而无需在每次点击时将您的网络表单发送到服务器,这意味着您不会丢失任何缩略图,如您所说。

【讨论】:

    【解决方案2】:

    我认为你没有在 page_load 绑定你的数据源

        protected void Page_Load(object sender, EventArgs e)
        { 
          pdfPagesListView.DataSource="";
          pdfPagesListView.DataBind();
        }
    

    在这种情况下,您需要在 Listview 的 DataBound 事件中检查您的 selectAllPages 是否被选中。

    谢谢

    【讨论】:

      猜你喜欢
      • 2014-09-21
      • 1970-01-01
      • 1970-01-01
      • 2011-06-15
      • 1970-01-01
      • 2017-04-22
      • 1970-01-01
      相关资源
      最近更新 更多