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

わんくま同盟

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

C# と VB.NET の入門サイト

■92929 / 2階層)  List型で入れ子になっているときのデータのセット方法
□投稿者/ 魔界の仮面弁士 (2466回)-(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 世代の設計なので扱いにくいですが)

解決済み
編集キー/

前の記事(元になった記事) 次の記事(この記事の返信)
←Re[1]: List型で入れ子になっているときのデータのセット方法 /河童 →Re[3]: List型で入れ子になっているときのデータのセット方法 /河童
 
上記関連ツリー

List型で入れ子になっているときのデータのセット方法 / 河童 (19/11/09(Sat) 15:57) #92924
Re[1]: List型で入れ子になっているときのデータのセット方法 / 魔界の仮面弁士 (19/11/09(Sat) 17:49) #92926
Re[1]: List型で入れ子になっているときのデータのセット方法 / 河童 (19/11/09(Sat) 17:43) #92925 解決済み
  └ List型で入れ子になっているときのデータのセット方法 / 魔界の仮面弁士 (19/11/09(Sat) 18:28) #92929 解決済み ←Now
    └ Re[3]: List型で入れ子になっているときのデータのセット方法 / 河童 (19/11/09(Sat) 19:26) #92930

上記ツリーを一括表示 / 上記ツリーをトピック表示
 
上記の記事へ返信