質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.47%
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

Windows Forms

Windows Forms(WinForms)はMicrosoft .NET フレームワークに含まれる視覚的なアプリケーションのプログラミングインターフェイス(API)です。WinFormsは管理されているコードの既存のWindowsのAPIをラップすることで元のMicrosoft Windowsのインターフェイスのエレメントにアクセスすることができます。

.NET Framework 4.0

Microsoft Windows用のソフトウェア開発環境/実行環境である .NET Frameworkの4番目のメジャーバージョンです。

Q&A

0回答

840閲覧

C# 複数の変数に格納されている複数の値をlistViewで複数の列毎に表示したい

sueteacher

総合スコア48

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

Windows Forms

Windows Forms(WinForms)はMicrosoft .NET フレームワークに含まれる視覚的なアプリケーションのプログラミングインターフェイス(API)です。WinFormsは管理されているコードの既存のWindowsのAPIをラップすることで元のMicrosoft Windowsのインターフェイスのエレメントにアクセスすることができます。

.NET Framework 4.0

Microsoft Windows用のソフトウェア開発環境/実行環境である .NET Frameworkの4番目のメジャーバージョンです。

0グッド

0クリップ

投稿2022/07/05 08:19

編集2022/07/05 08:25

【解決したいこと】
・複数の変数と複数の値毎に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

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Zuishin

2022/07/05 08:26

SubItems でどうぞ。使い方は過去の質問に回答があります。
dodox86

2022/07/06 05:31

前の質問でいただいた回答でも指摘がありますが、ちゃんと前の回答内容をご自身で消化しないとダメなのでは。できていますか? 本質問のコードでも、利用しているデータ構造に色々無理がありそうです。 > List<string[]> datalists012 = new List<string[]>(); とか。不可能ではないでしょうけど。 > 【実装過程】 > ・1列に表示されてしまう。 > ・理由は、1つのアイテムに追加され続けているから。 "されてしまう"と言うか、追加し続けているのは質問者さん当人ですね。ListViewで用意されているプロパティやメソッドを適切に使うのが正当ですが、それを使わないとしても横方向の並びのデータを縦方向にするようなことはC#以外のプログラミングでも同じなので、分けて考えないと。
kikukiku

2022/07/06 06:21

下記変更前を下記変更後に変更すれば良いです。 ・変更前 foreach(string columns2 in datalists012[1]) { listView1.Items.Add(columns2); } ・変更後 var i = 0; foreach (string columns2 in datalists012[1]) { listView1.Items[i++].SubItems.Add(columns2); }
dekaaki

2022/07/07 01:35

さすがにこの質問者さんに対して回答はあまりしたくなりました ・前回の回答に対して想定通りだったのかどうかも書かずにベストアンサーだけ。 (6/20に回答してから放置されてて今回の質問を書くためにそもそも回答が1件しかないから、ベストアンサーを付けただけという感じ) ・みなさんが回答や返信してくれた内容をきちんと調べたり、自分のコードにしようという感じが感じられない 私の回答の仕方にも問題はあるのかもしれませんが...
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.47%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問