|
回答をつける前に、方針転換による取り下げ行われていた…。 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 世代の設計なので扱いにくいですが)
|