asp.net datalist 选择每个类别的所有复选框

2024-05-22

我有一个页面,用户可以在数据列表控件中选择不同的文档文件。使用预渲染事件处理程序根据类别对文档进行分类。文档是根据复选框控件(而不是复选框列表)选择的。到目前为止,一切都很好。接下来我想要发生的事情是在每个类别名称旁边放置一个“全选”复选框,该复选框应该仅选择该类别下的复选框。这是数据列表控件:

<asp:DataList ID="DataList1" runat="server" RepeatDirection="Vertical" OnPreRender="DataList1_PreRender" DataKeyField="docid" EnableViewState="false">
<ItemTemplate>
    <table cellpadding="0" cellspacing="0" id="tbl_data">
        <tr>
            <td>
                <asp:Label ID="lblHeader" runat="server" Font-Bold="True" Font-Underline="True"></asp:Label>
             <asp:Label runat="server" id="lbl_cb_all" visible="false">Select All <input runat="server" id="cb_selectall" type="checkbox" value='<%# Eval("catid") %>' /> </asp:Label>
            </td>
        </tr>

        <tr runat="server" id="tr_data">
            <td>
                <asp:Label ID="lbl_categoryname" runat="server" Text='<%# Eval("categoryname") %>' Visible="false" /> <!-- Hide this; only used in Code Behind -->
                 <input runat="server" id="cb_docid" type="checkbox" value='<%# Eval("docid") %>' />
                  <asp:Hyperlink ID="hpl_docfileencr" Text='<%# Eval("docfileencr") %>' NavigateUrl='<%# "~/PDFEncr/" + DataBinder.Eval(Container.DataItem, "docfileencr") %>' Target="_blank"  runat="server" />
                <br />
            </td>
        </tr>
    </table>
</ItemTemplate>

这是 OnPreRender 代码:

protected void DataList1_PreRender(object sender, EventArgs e)
{
    string strTempLabelCategory = "";
    foreach (DataListItem item in DataList1.Items)
    {



        Label lbl_categoryname = item.FindControl("lbl_categoryname") as Label;


        if (strTempLabelCategory.ToUpper() != lbl_categoryname.Text.ToString().ToUpper())
        {
            strTempLabelCategory = lbl_categoryname.Text.ToString().ToUpper();
            Label lblHeader = item.FindControl("lblHeader") as Label;
            lblHeader.Text = strTempLabelCategory.ToUpper();

            Label lbltempdiv = item.FindControl("lbl_cb_all") as Label;
            lbltempdiv.Visible = true;
        }
    }
}

我一直在寻找可以在我的代码中工作的东西,但没有运气。而且我对这段代码投入太多,现在无法尝试 Checkboxlist 控件(不确定这是否有帮助)。 有任何想法吗?我想我可以使用:http://www.dotnetcurry.com/ShowArticle.aspx?ID=77 http://www.dotnetcurry.com/ShowArticle.aspx?ID=77代码,但不确定如何使其工作?如果我可以以某种方式使全选复选框与标签绑定,然后查找所有标签,那么链接的代码可能会有所帮助。 谢谢!


  1. 使用HiddenFields来存储CatID and DocID
  2. 两者都使用 ASP.NET 复选框而不是 HTML 输入
  3. 处理全选复选框'CheckedChanged event:

protected void CheckAllChanged(Object sender, EventArgs e)
{
    CheckBox checkAll = (CheckBox)sender;
    DataListItem item = (DataListItem)checkAll.NamingContainer;
    HiddenField HiddenCatID = (HiddenField)item.FindControl("HiddenCatID");
    var catCheckBoxes = DataList1.Items.Cast<DataListItem>()
        .Where(li => ((HiddenField)li.FindControl("HiddenCatID")).Value == HiddenCatID.Value)
        .Select(li => li.FindControl("cb_docid"));
    foreach (CheckBox docCheckBox in catCheckBoxes)
    {
        docCheckBox.Checked = checkAll.Checked;
    }
}

on aspx:

<asp:CheckBox runat="server" OnCheckedChanged="CheckAllChanged" AutoPostBack="true"  id="cb_selectall" />
<asp:HiddenField ID="HiddenCatID" runat="server" Value='<%# Eval("CatID") %>' />
<asp:HiddenField ID="HiddenDocID" runat="server" Value='<%# Eval("DocID") %>' />

您还需要EnableViewState=true在 DataList 上以维护复选框状态并启用选中/取消选中。


Edit:

因为您在运行它时遇到问题,所以这里有一个完整的工作示例页面。

以下是 aspx 上所需的控件(注意 f.e.<tr runat="server" id="tr_category">):

<ItemTemplate>
    <table cellpadding="0" cellspacing="0" id="tbl_data">
        <tr runat="server" id="tr_category">
            <td>
                <asp:Label ID="lblHeader" runat="server" Font-Bold="True" Text='<%# Eval("categoryname") %>' Font-Underline="True"></asp:Label>
                <asp:Label runat="server" ID="lbl_cb_all">Select All
                <asp:CheckBox runat="server"  OnCheckedChanged="CheckAllChanged" AutoPostBack="true"  id="cb_selectall" />
                </asp:Label>
            </td>
        </tr>
        <tr runat="server" id="tr_data">
            <td>
                <asp:HiddenField ID="HiddenCatID" runat="server" Value='<%# Eval("CatID") %>' />
                <asp:CheckBox runat="server" id="cb_docid" />
                <asp:HyperLink ID="hpl_docfileencr" Text='<%# Eval("docfileencr") %>' NavigateUrl='<%# "~/PDFEncr/" + DataBinder.Eval(Container.DataItem, "docfileencr") %>'
                    Target="_blank" runat="server" />
                <br />
            </td>
        </tr>
    </table>
</ItemTemplate>
  1. 确保 DataList 仅是数据绑定的if(!IsPostback),否则复选框选择将不会被维持:

    protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack) BindDataList();
    }
    
  2. 我在用着ItemDataBound代替PreRender这对于正确重新加载 ViewState 很重要。我还简化了所有内容:

    protected void DataList1_ItemDataBound(Object sender, DataListItemEventArgs e)
    {
        if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType==ListItemType.AlternatingItem)
        {
            var row  = (DataRowView)e.Item.DataItem;
            var view = row.DataView;
            var lastRow = e.Item.ItemIndex == 0 ? null : view[e.Item.ItemIndex-1];
            var tr_category = (System.Web.UI.HtmlControls.HtmlTableRow)e.Item.FindControl("tr_category");
            var sameCategory = lastRow != null && (int)row["catid"] == (int)lastRow["catid"];
            tr_category.Visible = !sameCategory;
        }
    }
    
  3. The CheckAllChanged保持不变。

即使您选择单个文档复选框并随后选择导致回发的类别复选框,这也会按预期工作。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

asp.net datalist 选择每个类别的所有复选框 的相关文章

随机推荐

  • 如何从 ISI Web of Knowledge 检索有关期刊的信息?

    我正在从事一些预测文章引用计数的工作 我遇到的问题是我需要 ISI Web of Knowledge 中有关期刊的信息 他们逐年收集这些信息 期刊影响因子 特征因子 但无法一次下载所有一年期期刊信息 只有 标记全部 选项 该选项始终标记列表
  • 如何在 C++ 中追加一个整数(用一个整数)

    我想知道是否有人可以告诉我如何在 C 中附加一个整数 与另一个整数 基本上 如果我有一个值为 67 的 int 我如何将它与数字 4 一起附加 以便整数现在为 674 提前致谢 将第一个乘以十的第二个位数次方 然后加上另一个 示例 63 和
  • 如何将 NSString 值 @"3.45" 转换为浮点数?

    如何将 NSString 值 3 45 转换为浮点数 3 45 float fCost NSDecimalNumber decimalNumberWithString 3 45 floatValue NSString val 3 45 fl
  • 分配 @changeset 在 eex 模板中不可用

    我正在尝试学习包含 Ecto Model 的 Phoenix 表单系统 但我遇到了一个无法通过的问题 我创建了一个表格 div class jumbotron div
  • 收益率回报多少?

    我发现自己经常对 IEnumerables 进行查找 以便返回每个结果 有没有办法压缩这样的东西 foreach var subSelector in subSelectors foreach var node in FindSingle
  • Android应用程序开发中的EditText警告

    在 xml 文件中声明 EditText 时 我收到了如下警告 没有标签视图通过 android labelFor id id start 属性指向此文本字段 编辑文本代码是
  • SWT GridLayout 列重叠

    Code final Composite sectionClient toolkit createComposite parent SWT NONE sectionClient setLayout UIHelper getLayoutFor
  • FFMPEG:使用具有复杂滤波器的视频滤波器

    我正在使用fluent ffmpeg用于对视频文件执行批量操作的 Node js 库 视频过滤器裁剪 16 9 输入 添加填充并将字幕刻录到填充中 在下一步中 我想使用复杂的滤镜来覆盖图像作为水印 ff input video mp4 ff
  • 网格 xamarin 形式中的重叠框架

    我正在使用最新的 xamarin 表单 我有一个要求 我需要在网格中的两行之间放置一个框架 我无法使其与绝对布局或弹性布局一起使用 下面是我对网格的简化尝试
  • 更新我的模型然后重新评估 IsValid?

    我将一些值传递给我的控制器操作 一切都绑定得很好 根据设计 表单 POST 中会缺少两个属性 然后我设置了缺失的值 但随后我想验证模型 但它仍然显示为 false 因为 ModelState 似乎没有跟上我的更改 HttpPost Auth
  • 为什么此类方法中的“this”未定义?

    我试图搜索似乎整个互联网 但我仍然对我为微服务编写的 JS 类的问题感到烦恼 仍在学习中 因此 我尝试在实例化对象上调用类方法 根据我的知识和我的 我认为是错误的 单元测试 它应该可以工作 好吧 我将从我收到的错误开始 GET api us
  • Huggingface 长文档摘要

    我预计摘要任务通常会假设长文档 但是 以下文档here https huggingface co course chapter1 3 fw pt 我所做的任何简单摘要调用都表示我的文档太长 gt gt gt summarizer pipel
  • WPF 如何从 DataGrid 转换为 DataTable?

    嗨 我正在关注这个guide http www wpf tutorial com datagrid control details row 以了解如何使用 DataGrid 我遇到的问题是如何将 DataGrid 中的数据转换为 DataT
  • 如何在 Unity 中对齐“轨道”或模块化对象?

    我正在开发一个简单的游戏 用户可以在其中放置不同但模块化的对象 例如 轨道 道路等 我的问题是 当将一个物体靠近另一个物体时 如何匹配和放置不同的物体 我的第一种方法是为每个模块对象创建一个隐藏的子对象 一个盒子 并将其放在可以放置其他对象
  • 将 TypeScript 项目与 Webpack 捆绑时,Node.js 提示“ReferenceError: require is not Define”

    我有一个简单的test ts我想使用 webpack 捆绑的文件 该文件包含一些代码和以下导入 没有任何错误 import from interval Observable of pipe Subject timer BehaviorSub
  • 对 numpy 数组中存在的元组中的列进行切片

    我已将一个文本文件导入到 numpy 数组中 如下所示 data np genfromtxt f dtype None delimiter names None 其中 f 包含我的 csv 文件的路径 现在数据包含以下内容 array 53
  • 安装 libjpeg v8 到 /opt/local

    如何在 OSX 上将 libjpeg 8 安装到 opt local 我问的原因是我想用以下方法制作大脑活动的小电影MNE C 库 http www nmr mgh harvard edu martinos userInfo data MN
  • 使用 PyArg_ParseTuple 解析用户定义类型

    如何使用解析用户定义的类型 或现有非标准库中的类型 PyArg ParseTuple 而不是使用普通的O格式 正如 Martijn 建议的那样 我通常更喜欢使用 它允许您传递一个函数 该函数将被调用以转换任何PyObject 到任意 C 双
  • 测试后 NUnit 回滚

    我对 NUnit 以及一般的自动化测试 还很陌生 我最近做了一些 Ruby On Rails 工作 并注意到在我的测试套件中 当我创建对象 例如新用户 并在套件过程中提交它们时 它们永远不会提交到数据库 以便我可以运行一遍又一遍地测试 不用
  • asp.net datalist 选择每个类别的所有复选框

    我有一个页面 用户可以在数据列表控件中选择不同的文档文件 使用预渲染事件处理程序根据类别对文档进行分类 文档是根据复选框控件 而不是复选框列表 选择的 到目前为止 一切都很好 接下来我想要发生的事情是在每个类别名称旁边放置一个 全选 复选框