2011-09-21 19 views
0

私はクラスとても似ています。だから私はこれを試してみました:ASP.NETのDataGrid表示ネストされた配列データは

.aspx: 
<asp:DataGrid ID="tbl" runat="server"> 
</asp:DataGrid> 

.aspx.cs: 
protected void Page_Load(object sender, EventArgs e) 
{ 
    tbl.DataSource = Global.Data; 
    tbl.DataBind(); 
} 

しかし、そのテーブルのみApplicationName題したコラムを持っています。私はApplicationInformationUserInformationにそれぞれのプロパティの列を持ち、List<ApplicationInformation>のリストにあるすべてのUserInformationの行を分けたいと思います。

私は意味を成していた...

は、私はテンプレートに少し見えたが、これを行う方法を見つけ出すことができなかったことを願っています。私はいつもすべてをループし、必要なすべてのデータを含む別の配列を作成することができますが、別のクラスを作成しなければならないと思っています。例えば

EDIT

、私が持っている場合List<ApplicationInformation>そうのように:その後、私は、テーブルはこのように表示させたい

{ 
    { ApplicationInformation 
     ApplicationName = "App 1" 
     { UserInformation 
      UserName = "John Smith" 
      ApplicationHost = "JOHN-PC" 
     } 
     { UserInformation 
      UserName = "Mindy from the network" 
      ApplicationHost = "MINDY-PC" 
     } 
    } 
    { ApplicationInformation 
     ApplicationName = "App 2" 
     { UserInformation 
      UserName = "John Smith" 
      ApplicationHost = "JOHN-PC" 
     } 
     { UserInformation 
      UserName = "Bob Jones" 
      ApplicationHost = "BOB-PC" 
     } 
    } 
} 

Application Name | User Name | Application Host 
------------------------------------------------------- 
    App 1    | John Smith | JOHN-PC 
    App 1    | Mindy fro...| MINDY-PC 
    App 2    | John Smmith | JOHN-PC 
    App 2    | Bob Jones | BOB-PC 

答えて

0

することができますItemDataBoundイベントを処理するか、linqを使用して匿名オブジェクトを作成してバインドしますあなたはJunaidが提案されているようRowDataBoundを処理する必要が

if (!IsPostBack) 
     { 
      List<ApplicationInformation> app = new List<ApplicationInformation>() 
      { 
        new ApplicationInformation() 
        { 
         ApplicationName="App 1", 
         Users=new List<UserInformation>() 
         { 
          new UserInformation() 
          { 
            UserName = "John Smith", 
            ApplicationHost = "JOHN-PC" 
          }, 
          new UserInformation() 
          { 
           UserName = "Mindy from the network", 
           ApplicationHost = "MINDY-PC" 
          } 
         } 
        }, 
        new ApplicationInformation() 
        { 
         ApplicationName="App 2", 
         Users=new List<UserInformation>() 
         { 
          new UserInformation() 
          { 
            UserName = "John Smith", 
            ApplicationHost = "JOHN-PC" 
          }, 
          new UserInformation() 
          { 
           UserName = "Bob", 
           ApplicationHost = "BOB-PC" 
          } 
         } 
        } 
      }; 

      var result = from ele in app 
          from user in ele.Users 
         select new 
         { 
           ApplicationName=ele.ApplicationName, 
           UserName=user.UserName , 
           ApplicationHost=user.ApplicationHost 
         }; 

      GridView1.DataSource = result.ToList(); 
      GridView1.DataBind(); 
     } 
0

あなたは、LINQの経由anonymousまたはtypedリストを構築することができます何らかの並べ替えをList<UserInformation>にバインドする。例えば

(未テストコード):

void CustomersGridView_RowDataBound(Object sender, GridViewRowEventArgs e) 
    { 

    if(e.Row.RowType == DataControlRowType.DataRow) 
    { 

     //find nested grid 
     GridView nestedGrid = e.FindControl("NestedGridID") as GridView; 
     nestedGrid.DataSource = DataBinder.Eval(e.DataItem,"Users"); 
     nestedGrid.DataBind(); 

    } 
} 
+0

しかし、その後、私はすべての 'ApplicationInformation' /' UserInformation'の組み合わせのために別の列を持っていないでしょう... – Entity

+0

私の質問は非常に明確ではありませんでした。例を使ってQを編集しました:) – Entity

0

をしかし、あなたは、それ自体で別のデータグリッドやリストの可能性がテンプレート列を持っている必要があります。o DataGridの

+0

これは、すべての 'ApplicationInformation' /' UserInformation'の組み合わせに対して1つのカラムしか持たないでしょう。私は例でQを編集します。 – Entity

関連する問題