如何显示具有单个对象和子列表(对象)的List(Of Object)?

时间:2011-09-06 14:05:18

标签: c# .net asp.net vb.net .net-2.0

由于我们服务器的环境限制,仅限于使用.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个帐户,并且是动态的。

最好的方法是什么?

2 个答案:

答案 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中的LinkBut​​ton / 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(); 
            }   
        } 
    } 
}