【发布时间】:2012-04-20 08:21:15
【问题描述】:
我有一个页面,用户可以在 datalist 控件中选择不同的文档文件。使用 on pre-render 事件处理程序根据类别对文档进行分类。基于复选框控件(不是复选框列表)选择文档。到目前为止,一切都很好。我接下来要做的是在每个类别名称旁边放置一个“全选”复选框,该复选框应仅选择该类别下的复选框。这是datalist控件:
<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 代码,但不知道如何使它工作?如果我能以某种方式使全选复选框与标签绑定,然后查找所有标签,那么链接的代码可能会有所帮助。 谢谢!
【问题讨论】:
-
使用 jquery 来检查作为 datalist 元素的子项的复选框。选中“选择”全部“时,它会向jQuery触发才能通过id获取数据项元素,然后通过循环通过输入复选框类型的子项并切换为此。 span>
-
布莱恩,谢谢。但我的问题是找出'datalist element by id然后循环遍历孩子'......
-
我试图让每个 ItemTemplate 包含一个具有 tbl_data ID 的表,然后找到父 tbl_data 表以深入到 tr_data 行内的复选框以查找复选框,但表 tbl_data 正在为每个项目呈现.
-
是的,你想避免这种情况。你是如何创建 asp:datalist 的?那将是您需要识别的内容,或者是一个数据列表中的所有内容,并且仅按类别排序。如果是这样,第一件事就是按类别将其分解,以便每个都包含在一些识别元素中。
-
Brian,相关的 .aspx 和 .cs 代码都在我的帖子中。为了按类别分组,我使用预渲染。甚至 Select All 复选框(如 .aspx 中所示)也按预期显示。我希望我可以分配包含类似于 selectall 复选框的复选框 ID 的 tr 元素,但.net 不允许动态 ID。谢谢!