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

わんくま同盟

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

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


(過去ログ 161 を表示中)
■92989 / )  Re[7]: Listの入れ子があるListをソースに設定する方法について
□投稿者/ 河童 (81回)-(2019/11/12(Tue) 16:00:42)
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);
}
返信 編集キー/


管理者用

- Child Tree -