0
存储过程的结果如下所示。Repeater中的数据格式
1 Group Admin user1
1 Group Admin user2
1 Group Admin user3
1 Group Admin user4
1 Group Admin user5
2 Group Second user6
2 Group Second user7
2 Group Second user8
2 Group Second user9
2 Group Second user10
2 Group Second user11
我想格式化数据,如图所示。
问题与this
我觉得Repeater
是在这里使用的最佳控制相关。你怎么看 ?如果是这样,我该如何格式化它? 与GridView
合并行是一个好主意吗?
阅读答案
// Page_Load
DataSet ds = GetAllUsers();
ViewState["UserRoles"] = ds;
rptParent.DataSource = ds;
rptParent.DataBind();
其他事件
// ItemDataBound
protected void rptParent_ItemDataBound(object sender, RepeaterItemEventArgs e)
{
RepeaterItem item = e.Item;
if ((item.ItemType == ListItemType.Item) ||
(item.ItemType == ListItemType.AlternatingItem))
{
string s = e.Item.DataItem.ToString();
string roleID = ((HiddenField)e.Item.FindControl("hidRoleId")).Value;
Repeater childRepeater = (Repeater)item.FindControl("rptChild");
string filterExp = "RoleId=" + roleID;
DataTable dtChild = ((DataSet)ViewState["UserRoles"]).Tables[0];
DataRow[] dr = dtChild.Select(filterExp);
childRepeater.DataSource = dr;
childRepeater.DataBind();
}
}
关口后可达
// MarkUp
<asp:Repeater runat="server" ID="rptParent" OnItemDataBound="rptParent_ItemDataBound">
<ItemTemplate>
<table>
<tr>
<td>
<asp:HiddenField ID="hidRoleId" runat="server" Value='<%#Eval("RoleId")%>' />
<asp:Label ID="lblRoleName" runat="server" Text='<%#Eval("RoleName")%>'></asp:Label>
</td>
<td>
<asp:CheckBox ID="CheckBox4" runat="server" />
</td>
<td>
<asp:CheckBox ID="CheckBox5" runat="server" />
</td>
<td>
<asp:CheckBox ID="CheckBox6" runat="server" />
</td>
</tr>
</table>
<asp:Repeater ID="rptChild" runat="server">
<ItemTemplate>
<table>
<tr>
<td>
<asp:HiddenField ID="hidRoleId" runat="server" Value='<%#Eval("UserId")%>' />
<asp:Label ID="Label2" runat="server" Text='<%# DataBinder.Eval(Container.DataItem, "UserName") %>'></asp:Label>
</td>
<td>
<asp:CheckBox ID="CheckBox7" runat="server" />
</td>
<td>
<asp:CheckBox ID="CheckBox8" runat="server" />
</td>
<td>
<asp:CheckBox ID="CheckBox9" runat="server" />
</td>
</tr>
</table>
</ItemTemplate>
</asp:Repeater>
</ItemTemplate>
</asp:Repeater>
我得到以下输出
但是,该组的名称也重复:(。这不是我想要的
我可以得到标记吗? – Rauf
var data = item.DataItem as DataTable; Repeater childRepeater =(Repeater)item.FindControl(“ChildRepeater”); string filterExp =“RoleId =”+ roleID; DataRow [] dtChild = data.Select(filterExp); childRepeater.DataSource = dtChild; childRepeater.DataBind();'它不起作用。我得到'数据'为空。 – Rauf
什么是DateItem的类型?如果它不是数据表,则'as'操作符将返回空值 –