|
■No92934 (魔界の仮面弁士 さん) に返信
こんにちは。魔界の仮面弁士 さん、お返事ありがとうございます。
わからないことが2点あります。
1.リストの値をテーブルにセットする方法
入れ子があるリストのグループリストからどのようにDataSetに値を設定させれば良いでしょうか?
2.キーの設定方法について
> グループ、チームとユーザは今後増えていきます。
> チームは複数のグループには属しません。
> ユーザは複数のチームには属しません。
データを追加する必要が今後でてくるのですが、そのときのチームとユーザの番号を一意にするのではなく、
同じ番号も使用したいと思っています。
例えば、
group_num team_num user_num
1 1 1
1 1 2
1 1 3
2 1 1
2 1 2
3 1 1
のようにgroup_num,team_num,user_numの3つをキーに設定したいです。
tblGに3つのキーを設定すると、
teamとuserがnullでエラーが発生します。
新しいユーザを追加するときは、
group_num,team_num,user_numで重複がなくuser_numの最大値を設定したいです。
同様にチームを追加するときは、
groupj_num,team_numuで重複がなくteam_numの最大値を設定したいです。
private void FormMain_Load(object sender, EventArgs
{
#region 型付DataSetを使えば、この部分をデザイン時に作成しておくこともできる
var tblG = ds.Tables.Add("Group");
tblG.Columns.Add("group_num", typeof(int));
tblG.Columns.Add("group_name");
tblG.Columns.Add("team_num");
tblG.Columns.Add("user_num");
tblG.PrimaryKey = new DataColumn[] { tblG.Columns["group_num"] };
//tblG.PrimaryKey = new DataColumn[] { tblG.Columns["group_num"], tblG.Columns["team_num"], tblG.Columns["user_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";
dgvGroup.DataSource = bindingSource1;
dgvTeam.DataSource = bindingSource2;
dgvUser.DataSource = bindingSource3;
dgvGroup.Columns["team_num"].Visible = false;
dgvGroup.Columns["user_num"].Visible = false;
dgvTeam.Columns["group_num"].Visible = false;
dgvUser.Columns["team_num"].Visible = false;
#endregion
// リスト作成
GroupLst = new List<GroupInfo>();
GroupInfo d = new GroupInfo();
d.group_num = 1;
d.group_name = "GroupA";
d.teamList = new List<TeamInfo>();
TeamInfo t = new TeamInfo();
t.team_num = 1;
t.team_name = "TeamA";
t.userList = new List<UserInfo>();
UserInfo u = new UserInfo();
u.user_num = 1;
u.user_name = "User1";
t.userList.Add(u);
d.teamList.Add(t);
GroupLst.Add(d);
GroupInfo d2 = new GroupInfo();
d2.group_num = 2;
d2.group_name = "GroupB";
d2.teamList = new List<TeamInfo>();
TeamInfo t2 = new TeamInfo();
t2.team_num = 2;
t2.team_name = "TeamB";
t2.userList = new List<UserInfo>();
UserInfo u2 = new UserInfo();
u2.user_num = 2;
u2.user_name = "User2";
t2.userList.Add(u2);
d2.teamList.Add(t2);
GroupLst.Add(d2);
// 不明点1
// グループリストからテーブルにどのように設定すれば良いでしょう
// データを追加
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, "GA_TeamA");
ds.Tables["Team"].Rows.Add(1, 2, "GA_TeamB");
ds.Tables["Team"].Rows.Add(1, 3, "GA_TeamC");
// 不明点2
// チームやユーザが入れ替わることはないのですが、
// チームとユーザの同じ番号を使いたいです。
// チームのキーの設定はグループとチームの番号の2種類で
// ユーザのキーの設定はグループとチームとユーザの番号の3種類で
// group_numとteam_numの2つを主キーに設定
//ds.Tables["Team"].Rows.Add(2, 1, "GB_TeamA");
ds.Tables["Team"].Rows.Add(2, 4, "GB_TeamA");
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();
}
|