【解決したいこと】
・複数の変数と複数の値毎に1列でlistViewに表示したい。
・配列と変数、ListViewの扱い方(列の追加方法)。
【Why?】
・別変数に格納される値をに列ごとに表示したいため。
・変数毎に格納されている行が違うため。
【前提条件】
・Excelファイルから直接ListViewに表示はしない。
・1度変数に格納します。(複数のフォームで使用するため。)
・1つの変数には複数の値が入ります。(1行すべての値が含まれています。)
【実装過程】
・1列に表示されてしまう。
・理由は、1つのアイテムに追加され続けているから。
【実装環境】
C# vsiualstudio2022 .net framework4.0 windowsform windows11
【参考資料】
・Excelからよみとり変数に格納せず、そのままListViewに表示の仕方
https://teratail.com/questions/805rwi5kz61n90
https://teratail.com/questions/8rmkh3qufecejj
空き時間にC#の実装をもがき続ける初心者です。
よろしくお願いします。
【謝罪】
・返信が遅くなりやすいです。申し訳ありません。
・伝えたいことがうまく伝わらず申し訳ありません。
【お礼】
過去いくつかのコメント頂きありがとうございます。とても助かっております。
C#
1using System; 2using System.Collections.Generic; 3using System.ComponentModel; 4using System.Data; 5using System.Drawing; 6using System.Linq; 7using System.Text; 8using NPOI.SS.UserModel; 9using System.Threading.Tasks; 10using System.Windows.Forms; 11 12namespace FormListView01 13{ 14 public partial class Form1 : Form 15 { 16 //2行を含む配列 17 List<string[]> datalists012 = new List<string[]>(); 18 //1行の配列 19 List<string[]> datalists03 = new List<string[]>(); 20 //1行の配列 21 List<string[]> datalists04 = new List<string[]>(); 22 public Form1() 23 { 24 InitializeComponent(); 25 ExcelRead1(); 26 } 27 28 private void button1_Click(object sender, EventArgs e) 29 { 30 31 ListViewRead(); 32 } 33 private void ListViewRead() 34 { 35 listView1.Items.Clear(); 36 listView1.Columns.Add("項目1"); 37 listView1.Columns.Add("項目2"); 38 listView1.Columns.Add("項目3"); 39 listView1.Columns.Add("項目4"); 40 listView1.View = View.Details; 41 42 foreach(string columns1 in datalists012[0]) 43 { 44 listView1.Items.Add(columns1); 45 } 46 foreach(string columns2 in datalists012[1]) 47 { 48 listView1.Items.Add(columns2); 49 } 50 foreach(string columns3 in datalists03[0]) 51 { 52 listView1.Items.Add(columns3); 53 } 54 foreach(string columns4 in datalists04[0]) 55 { 56 listView1.Items.Add(columns4); 57 } 58 59 // リストビューをクリアして項目を一括追加 60 listView1.SuspendLayout(); 61 62 listView1.ResumeLayout(); 63 } 64 private void ExcelRead1() 65 { 66 //エクセルファイルを開く 67 IWorkbook workbook = WorkbookFactory.Create(@".\input\ListViewPractice01.xlsx"); 68 //index1のシートを参照 69 ISheet worksheet2 = workbook.GetSheetAt(0); 70 //シートの行をworksheet.LastRowNum; で最終行まで参照 71 int lastRow2 = worksheet2.LastRowNum; 72 73 //2行を取得 74 for (int i = 8; i <= 9; i++) 75 { 76 //i番目の行を取得 77 IRow row = worksheet2.GetRow(i); 78 //回して参照した値を格納 79 List<string> sv = new List<string>(); 80 81 82 //セルを2番目から(左から右に)最後まで回す。 83 for (int x = 1; x < row.LastCellNum; x++) 84 { 85 ICell cell = row?.GetCell(x); 86 87 //セルの型に応じたプロパティを参照する 88 if (cell == null) 89 { 90 sv.Add(""); 91 } 92 else 93 { 94 switch (cell.CellType) 95 { 96 //セルの型がstringのとき 97 case CellType.String: 98 //List<string>のsvに値を格納 99 sv.Add(cell.StringCellValue); 100 //switch文から抜ける 101 break; 102 //セルの型が数値のとき 103 case CellType.Numeric: 104 //数値をstringに変更し格納 105 sv.Add(Convert.ToString(cell.NumericCellValue)); 106 //switch文から抜ける 107 break; 108 //case以外のとき(elseの役割) 109 default: 110 //空を代入 111 sv.Add(""); 112 //switch文から抜ける 113 break; 114 } 115 } 116 } 117 118 119 //1行のセルをすべて取り終わったあとにstringの値をstring[]に変換し、格納 120 datalists012.Add(sv.ToArray()); 121 } 122 //11番目の行を取得 123 IRow row10 = worksheet2.GetRow(10); 124 //回して参照した値を格納 125 List<string> sv02 = new List<string>(); 126 127 128 //セルを2番目から(左から右に)最後まで回す。 129 for (int x = 1; x < row10.LastCellNum; x++) 130 { 131 ICell cell = row10?.GetCell(x); 132 133 //セルの型に応じたプロパティを参照する 134 if (cell == null) 135 { 136 sv02.Add(""); 137 } 138 else 139 { 140 switch (cell.CellType) 141 { 142 //セルの型がstringのとき 143 case CellType.String: 144 //List<string>のsvに値を格納 145 sv02.Add(cell.StringCellValue); 146 //switch文から抜ける 147 break; 148 //セルの型が数値のとき 149 case CellType.Numeric: 150 //数値をstringに変更し格納 151 sv02.Add(Convert.ToString(cell.NumericCellValue)); 152 //switch文から抜ける 153 break; 154 //case以外のとき(elseの役割) 155 default: 156 //空を代入 157 sv02.Add(""); 158 //switch文から抜ける 159 break; 160 } 161 } 162 } 163 164 165 //1行のセルをすべて取り終わったあとにstringの値をstring[]に変換し、格納 166 datalists03.Add(sv02.ToArray()); 167 168 //12番目の行を取得 169 IRow row11 = worksheet2.GetRow(11); 170 //回して参照した値を格納 171 List<string> sv04 = new List<string>(); 172 173 174 //セルを2番目から(左から右に)最後まで回す。 175 for (int x = 1; x < row11.LastCellNum; x++) 176 { 177 ICell cell = row11?.GetCell(x); 178 179 //セルの型に応じたプロパティを参照する 180 if (cell == null) 181 { 182 sv04.Add(""); 183 } 184 else 185 { 186 switch (cell.CellType) 187 { 188 //セルの型がstringのとき 189 case CellType.String: 190 //List<string>のsvに値を格納 191 sv04.Add(cell.StringCellValue); 192 //switch文から抜ける 193 break; 194 //セルの型が数値のとき 195 case CellType.Numeric: 196 //数値をstringに変更し格納 197 sv04.Add(Convert.ToString(cell.NumericCellValue)); 198 //switch文から抜ける 199 break; 200 //case以外のとき(elseの役割) 201 default: 202 //空を代入 203 sv04.Add(""); 204 //switch文から抜ける 205 break; 206 } 207 } 208 } 209 210 211 //1行のセルをすべて取り終わったあとにstringの値をstring[]に変換し、格納 212 datalists04.Add(sv04.ToArray()); 213 214 workbook.Close(); 215 } 216 } 217} 218
あなたの回答
tips
プレビュー