■No92952 (魔界の仮面弁士 さん) に返信 たくさんアドバイスいただいて、ありがとうございます。 少し頭が混乱してきました。 申し訳ないです。やっぱりリストを使って処理を行いたいです。 Listの入れ子があるListをソースに設定する方法について やりたいことを整理しました。 画面上にDataGridViewが3つあります。 dgvGroup dgvTeam dgvUser DataGridViewのソースとなるデータは、外部ファイルからリスト型で読み込まれます。 この処理は実装済みです。 読み込んだリスト型のデータを各DataGridViewのソースに設定したいです。 画面上の動きとしては、 画面のロード時にグループ(GroupA)を表示 「GroupA」を選択するとチーム(TeamA)を表示 「TeaA」を選択するとユーザ(User1)を表示 のように段階を踏ませたいです。 グループ、チーム、ユーザの新規追加は、 別フォームを開いてから登録処理を実行させようと思っています。 今わからないことは、 段階的にDataGridViewを表示させる方法です。 ロード時に入れ子のリストごとに新たにリスト作成して それをDataGridViewのソースに設定しています。 どのように各DataGridViewのリストのソースを設定すれば良いでしょうか? Groupが選択されたときにTeamのDataGridViewのソースの作成方法 Teamが選択されたときのUserのDataGridViewのソースの作成方法 group_numとteam_numのキーの渡し方がわかりません。 // グループリスト List<GroupInfo> GroupLst; public class GroupInfo { public int group_num { get; set; } public string group_name { get; set; } public List<TeamInfo> teamList = new List<TeamInfo>(); } public class TeamInfo { public int team_num { get; set; } public string team_name { get; set; } public List<UserInfo> userList = new List<UserInfo>(); } public class UserInfo { public int user_num { get; set; } public string user_name { get; set; } } // DataGridView用 public class dgvGroupInfo { public int group_num { get; set; } public string group_name { get; set; } } public class dgvTeamInfo { public int team_num { get; set; } public string team_name { get; set; } } public class dgvUserInfo { public int user_num { get; set; } public string user_name { get; set; } } List<dgvGroupInfo> DgvGroupLst; // グリッド用グループリスト int RowIdx1 = 0; // 選択行インデックス List<dgvTeamInfo> DgvTeamLst; // グリッド用チームリスト int RowIdx2 = 0; // 選択行インデックス List<dgvUserInfo> DgvUserLst; // グリッド用ユーザリスト int RowIdx3 = 0; // 選択行インデックス private void FormMain_Load(object sender, EventArgs e) { // リストデータ作成 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); // DataGridViewソース作成 CreatDgvSource(); } void CreatDgvSource() { // リスト更新、表示 dgvGroup.DataSource = null; dgvTeam.DataSource = null; dgvUser.DataSource = null; // リストのデータを取得 int iRet = Create_DgvLst(); if (iRet == -1) return; // グループのソースセット dgvGroup.DataSource = DgvGroupLst; // チームのソースセット dgvTeam.DataSource = DgvTeamLst; // ユーザのソースセット dgvUser.DataSource = DgvUserLst; // 選択行設定 if (RowIdx1 >= dgvGroup.Rows.Count) RowIdx1--; if (dgvGroup.Rows.Count > 0 && RowIdx1 < 0) RowIdx1 = 0; dgvGroup.Refresh(); dgvTeam.Refresh(); dgvUser.Refresh(); } private int Create_DgvLst() { // グリッド用リストを初期化 DgvGroupLst = new List<dgvGroupInfo>(); DgvTeamLst = new List<dgvTeamInfo>(); DgvUserLst = new List<dgvUserInfo>(); // 取得データからリストを作成 foreach (var g in GroupLst) // グループ { dgvGroupInfo d1 = new dgvGroupInfo(); d1.group_num = g.group_num; d1.group_name = g.group_name; DgvGroupLst.Add(d1); foreach (var t in g.teamList) // チーム { dgvTeamInfo d2 = new dgvTeamInfo(); d2.team_num = t.team_num; d2.team_name = t.team_name; DgvTeamLst.Add(d2); foreach (var u in t.userList) // ユーザ { dgvUserInfo d3 = new dgvUserInfo(); d3.user_num = u.user_num; d3.user_name = u.user_name; DgvUserLst.Add(d3); } } } return 0; }
- Child Tree -