C# 如何显示包含单个对象和子列表(对象)的列表(对象)?

C# 如何显示包含单个对象和子列表(对象)的列表(对象)?,c#,.net,asp.net,vb.net,.net-2.0,C#,.net,Asp.net,Vb.net,.net 2.0,由于服务器上的环境限制,仅限于使用.Net framework的v2.0(我们使用VB.Net) 我有一个ASP.net网页,它从对active directory中的用户帐户进行检查的Web服务中提取数据。操作员可以使用web界面一次检查多个帐户。webservice返回(AccountCheck)对象列表,这些对象本身包含单个属性,如用户名、电子邮件地址,以及(AccountError)对象列表(包含多个属性) 因此,帐户检查对象如下所示: Username FriendlyName Ema

由于服务器上的环境限制,仅限于使用.Net framework的v2.0(我们使用VB.Net)

我有一个ASP.net网页,它从对active directory中的用户帐户进行检查的Web服务中提取数据。操作员可以使用web界面一次检查多个帐户。webservice返回(AccountCheck)对象列表,这些对象本身包含单个属性,如用户名、电子邮件地址,以及(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
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(); 
            }   
        } 
    } 
} 

我想做的是使用某种转发器,创建多个面板或div,其中包含显示用户名、电子邮件等的标签,以及一个绑定了accounterror列表以显示所有错误的gridview。用户可以同时检查2、5、7个帐户,并且是动态的


最好的方法是什么?

您需要嵌套两个列表控件;例如,中继器和gridview,或者中继器和中继器,取决于您对布局的控制程度。相关部分是将内部控件的数据源数据绑定到内部列表:

<asp:Repeater ...>
    <ItemTemplate>
        <%# Eval("Username") %>
        ...
        <asp:GridView DataSource='<%# Eval("AccountErrors") %>' ...>
           ...
        </asp:GridView>
    </ItemTemplate>
</asp:Repeater>

...
...

您可以使用数据列表尝试以下操作:

<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> 


带有用于错误消息的嵌套转发器的转发器使用此方法获取错误“服务器标记不能包含构造”。不过看起来很简单。@Tom Pickles:你确定你在
这个工作完成后得到了
:DataSource=''。谢谢你的帮助。