由于我们服务器的环境限制,仅限于使用.Net框架的v2.0(我们使用VB.net)。
我有一个ASP.net网页,该网页从网络服务中提取数据,该网络服务对活动目录中的用户帐户执行检查。操作员可以使用Web界面一次检查多个帐户。 webservice返回一个(AccountCheck)对象列表,这些对象本身包含单个属性,如用户名,电子邮件地址和包含多个属性的List(AccountError)对象。
因此帐户检查对象如下所示:
Username
FriendlyName
Email
AccountError1 > Message > Weight > ResolverTeam > etc
AccountError2 > Message > Weight > ResolverTeam > etc
AccountError3 > Message > Weight > ResolverTeam > etc
AccountError4 > Message > Weight > ResolverTeam > etc
AccountError5 > Message > Weight > ResolverTeam > etc
Username
FriendlyName
Email
AccountError1 > Message > Weight > ResolverTeam > etc
AccountError2 > Message > Weight > ResolverTeam > etc
AccountError3 > Message > Weight > ResolverTeam > etc
AccountError4 > Message > Weight > ResolverTeam > etc
AccountError5 > Message > Weight > ResolverTeam > etc
Username
FriendlyName
Email
AccountError1 > Message > Weight > ResolverTeam > etc
AccountError2 > Message > Weight > ResolverTeam > etc
AccountError3 > Message > Weight > ResolverTeam > etc
AccountError4 > Message > Weight > ResolverTeam > etc
AccountError5 > Message > Weight > ResolverTeam > etc
等
我想要做的是使用某种转发器,创建多个面板或div,其中包含显示用户名,电子邮件等的标签,以及一个绑定了它的accounterror列表以显示所有错误的gridview。用户可以一次检查2,5,7个帐户,并且是动态的。
最好的方法是什么?
答案 0 :(得分:1)
您需要嵌套两个列表控件;例如,转发器和网格视图,或转发器和转发器,具体取决于您在布局上需要多少控制。相关部分是将内部控件的DataSource数据绑定到内部列表:
<asp:Repeater ...>
<ItemTemplate>
<%# Eval("Username") %>
...
<asp:GridView DataSource='<%# Eval("AccountErrors") %>' ...>
...
</asp:GridView>
</ItemTemplate>
</asp:Repeater>
答案 1 :(得分:1)
您可以使用DataList尝试这样的事情:
<table width="595px">
<asp:DataList BackColor="#ffffff" id="DataList1" DataKeyField="<ID>" OnItemDataBound="DataList1_ItemDataBound" runat="server" Width="100%">
<ItemTemplate>
<tr>
<td>
<asp:LinkButton ID="LinkButton1" runat="server" Text="+" OnCommand="LinkButton1_Command" CommandArgument='<%#Container.ItemIndex%>'></asp:LinkButton>
</td>
<td><%#Eval("<COLUMN NAME>")%></td>
<td><%#Eval("<COLUMN NAME>")%></td>
<td><%#Eval("<COLUMN NAME>")%></td>
</tr>
<asp:Panel ID="pnlChildView" runat="server">
<asp:DataList ID="DataList2" runat="server" Width="100%">
<ItemTemplate>
<tr>
<td><%#Eval("<CHILD OLUMN NAME>")%></td>
<td><%#Eval("<CHILD COLUMN NAME>")%></</td>
<td><%#Eval("<CHILD COLUMN NAME>")%></</td>
</tr>
</ItemTemplate>
</asp:DataList>
</asp:Panel>
</ItemTemplate>
</asp:DataList>
</table>
当用户单击DataList1中的LinkButton / Button时,请执行以下操作:
protected void LinkButton1_Command(object sender, CommandEventArgs e)
{
//pass index of item in command argument
int itemIndex = Convert.ToInt32(e.CommandArgument);
//find the pnlChildView control
Panel childViewPanel = (Panel)DataList1.Items[itemIndex].FindControl("pnlChildView");
if (childViewPanel != null)
{
//toggle visibility of childViewPanel and bind child list if panel is visible
if (childViewPanel.Visible)
{
DataList childList = childViewPanel.FindControl("DataList2");
if (childList != null)
{
int keyValue = (int)DataList1.DataKeys[itemIndex];
//bind the list using DataList1 data key value
childList.DataSource = <DATA SOURCE>; //get data using keyValue
childList.DataBind();
}
}
}
}