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

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

ログ内検索
  • キーワードを複数指定する場合は 半角スペース で区切ってください。
  • 検索条件は、(AND)=[A かつ B] (OR)=[A または B] となっています。
  • [返信]をクリックすると返信ページへ移動します。
キーワード/ 検索条件 /
検索範囲/ 強調表示/ ON (自動リンクOFF)
結果表示件数/ 記事No検索/ ON
大文字と小文字を区別する

No.92980 の関連記事表示

<< 0 >>
■92980  Re[4]: Listの入れ子があるListをソースに設定する方法について
□投稿者/ 河童 -(2019/11/12(Tue) 13:57:18)
    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;
            }
    
    
記事No.92931 のレス /過去ログ161より / 関連記事表示
削除チェック/



<< 0 >>

パスワード/

- Child Tree -