C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

ログ内検索
  • キーワードを複数指定する場合は 半角スペース で区切ってください。
  • 検索条件は、(AND)=[A かつ B] (OR)=[A または B] となっています。
  • [返信]をクリックすると返信ページへ移動します。
キーワード/ 検索条件 /
検索範囲/ 強調表示/ ON (自動リンクOFF)
結果表示件数/ 記事No検索/ ON
大文字と小文字を区別する

No.92929 の関連記事表示

<< 0 >>
■92929  Re[2]: List型で入れ子になっているときのデータのセット方法
□投稿者/ 魔界の仮面弁士 -(2019/11/09(Sat) 18:28:06)
    回答をつける前に、方針転換による取り下げ行われていた…。 orz
    解決済みマークを復活させるついでに追加投稿。
    
    
    ■No92925 (河童 さん) に返信
    > DataGridViewだと登録方法が難しいので、登録画面を再考します。
    
    階層の数だけ DataGridView を用意するという手もあります。使いやすいかどうかは仕様次第ですが。
    
    
    
    空の DataGridView を 3 つと
    BindingSource を 3 つ、
    フォームに貼っておいてください。
    
    
    private DataSet ds = new DataSet();
    private void F01_Main_Load(object sender, EventArgs e)
    {
        #region 型付DataSetを使えば、この部分をデザイン時に作成しておくこともできる
        var tblG = ds.Tables.Add("Group");
        tblG.Columns.Add("group_num", typeof(int));
        tblG.Columns.Add("group_name");
        tblG.PrimaryKey = new DataColumn[] { tblG.Columns["group_num"] };
    
        var tblT = ds.Tables.Add("Team");
        tblT.Columns.Add("group_num", typeof(int));
        tblT.Columns.Add("team_num", typeof(int));
        tblT.Columns.Add("team_name");
        tblT.PrimaryKey = new DataColumn[] { tblT.Columns["group_num"] , tblT.Columns["team_num"] };
    
        var tblU = ds.Tables.Add("User");
        tblU.Columns.Add("team_num", typeof(int));
        tblU.Columns.Add("user_num", typeof(int));
        tblU.Columns.Add("user_name");
        tblU.PrimaryKey = new DataColumn[] { tblU.Columns["team_num"], tblU.Columns["user_num"] };
    
        ds.Relations.Add("G_T", tblG.Columns["group_num"], tblT.Columns["group_num"]);
        ds.Relations.Add("T_U", tblT.Columns["team_num"], tblU.Columns["team_num"]);
    
        bindingSource1.DataSource = ds;
        bindingSource1.DataMember = "Group";
        bindingSource2.DataSource = bindingSource1;
        bindingSource2.DataMember = "G_T";
        bindingSource3.DataSource = bindingSource2;
        bindingSource3.DataMember = "T_U";
    
        dataGridView1.DataSource = bindingSource1;
        dataGridView2.DataSource = bindingSource2;
        dataGridView3.DataSource = bindingSource3;
    
        dataGridView2.Columns["group_num"].Visible = false;
        dataGridView3.Columns["team_num"].Visible = false;
        #endregion
    
    
        // データを追加
        ds.Tables["Group"].Rows.Add(1, "GroupA");
        ds.Tables["Group"].Rows.Add(2, "GroupB");
        ds.Tables["Group"].Rows.Add(3, "GroupC");
        ds.Tables["Team"].Rows.Add(1, 1, "TeamA");
        ds.Tables["Team"].Rows.Add(2, 2, "TeamB");
        ds.Tables["Team"].Rows.Add(3, 3, "TeamC");
        ds.Tables["User"].Rows.Add(1, 1, "User1");
        ds.Tables["User"].Rows.Add(1, 2, "User2");
        ds.Tables["User"].Rows.Add(2, 3, "User3");
        ds.Tables["User"].Rows.Add(2, 4, "User4");
        ds.Tables["User"].Rows.Add(3, 5, "User5");
        ds.AcceptChanges();
    
    // dataGridView4.DataSource = ds.Tables["User"];
    }
    
    
    DataGridView の代わりに DataGrid を使えば、一つのコントロールで
    階層構造を表現することもできます。
    (.NET Framework 1.x 世代の設計なので扱いにくいですが)
記事No.92924 のレス / END /過去ログ160より / 関連記事表示
削除チェック/



<< 0 >>

パスワード/

- Child Tree -