| ■No92983 (魔界の仮面弁士 さん) に返信
GroupLst を BindingList にしました。 そして RowEnter イベントを追加するとリスト表示することができました。 ありがとうございます。
続けて質問させてください。
追加や編集の処理を行うときGroupLst にどのように値を更新すれば良いですか? またこのDataGridView のソースをそのままGroupLstに戻す方法を教えてください。 GroupLst は、上書き更新で行いたいです。
// グループリスト BindingList<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; } }
private void FormMain_Load(object sender, EventArgs e) {
// リストデータ作成 GroupLst = new BindingList<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);
// リストデータ作成 //GroupLst = new List<GroupInfo>(); GroupInfo d2 = new GroupInfo(); d2.group_num = 2; d2.group_name = "GroupB"; d2.teamList = new List<TeamInfo>(); TeamInfo t2 = new TeamInfo(); t2.team_num = 1; t2.team_name = "TeamB"; t2.userList = new List<UserInfo>(); UserInfo u2 = new UserInfo(); u2.user_num = 1; u2.user_name = "User2"; t2.userList.Add(u2); d2.teamList.Add(t2); GroupLst.Add(d2);
// DataGridViewソース作成 CreatDgvSource(); }
void CreatDgvSource() { // リスト更新、表示 dgvGroup.DataSource = null;
// グループのソースセット dgvGroup.DataSource = GroupLst; dgvGroup.Refresh(); }
private void dgvGroup_RowEnter(object sender, DataGridViewCellEventArgs e) { dgvTeam.DataSource = null; var group = dgvGroup.Rows[e.RowIndex].DataBoundItem as GroupInfo; dgvTeam.DataSource = (group != null) ? (object)group.teamList : typeof(TeamInfo); if (group == null || !group.teamList.Any()) { dgvUser.DataSource = new UserInfo[0]; } }
private void dgvTeam_RowEnter(object sender, DataGridViewCellEventArgs e) { dgvUser.DataSource = null; var team = dgvTeam.Rows[e.RowIndex].DataBoundItem as TeamInfo; dgvUser.DataSource = (team != null) ? (object)team.userList : typeof(UserInfo); } |