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

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

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

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

Visual Studio

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

Q&A

解決済

2回答

1070閲覧

VisualSutdio2022 Listにデータを追加し、ListVewに表示させたいです

doidoi1104

総合スコア2

C#

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

Visual Studio

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

1グッド

0クリップ

投稿2023/04/12 07:32

編集2023/04/12 10:58

クラスPersonのデータをListに保存し、ListのデータをListViewに表示させたいです

フォーム上には
テキストボックスが3つ、ボタンが1つ、リストビューが1つあります
名前、年齢、性別をそれぞれのテキストボックスに入力し、ボタンを押すと
リストビューに表示されるような完成イメージです
(リストビューカラムには、名前カラム年齢カラム性別カラムを用意します)

  名前  | 年齢 | 性別 |   ←カラム
山田 太郎 | 56 | 男  |   ←入力データ

上記イメージです

前提

プログラミング知識が全くなく、ネットや書籍で知識をかき集め
他サイト某知恵袋で以下コードをお教えいただきました

発生している問題・エラーメッセージ

コードエラーは出てないのですが、
ボタンを押しても何も表示されません
問題と思う箇所は二つあります

①クラスPersonの変数Name、変数Age、変数Genser をListに追加したいのですが
var personlist = new List<Person>();
personlist.Add(person.Name);
と入力すると、Add()の()内がエラーになります
なのでpersonだけを入力しています、、

②Listの情報をリストビューに表示するコード
エラーは出てないのですが、何かが足りないきがして、、

foreach(var i in personlist)
{
listView1.Items.Add(new ListViewItem());
}

ソースコード

   private void button1_Click(object sender, EventArgs e) { Person person = new Person(); person.Name = txtName.Text; person.Age = int.Parse(txtAge.Text); person.Gender =txtGender.Text; var personlist = new List<Person>(); personlist.Add(person); foreach(var i in personlist) { listView1.Items.Add(new ListViewItem()); } } internal class Person { public string Name { get; set; } public int Age { get; set; } public string Gender { get; set; } public void SetItem(string name, int age, string gender) { this.Name = name; this.Age = age; this.Gender = gender; } }

補足情報(FW/ツールのバージョンなど)

Windows 11 の
Visual Studio 2022 で
Windows Forms アプリをターゲットフレームワーク .NET Framework 4.8
で作っています!

TN8001👍を押しています

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

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

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

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

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

退会済みユーザー

退会済みユーザー

2023/04/12 07:54

前にも言ったけど、 開発環境を質問欄を編集して追記してください。(例: Windows 10 の Visual Studio 2022 で Windows Forms アプリをターゲットフレームワーク .NET Framework 4.8 で作っています・・・とか) ソースコードの上下を ``` と ``` で囲ってください(``` はバッククォート 3 つ)。インデントされて読みやすくなるので。
doidoi1104

2023/04/12 10:55

いつも質問見てくださりありがとうございます!そして前回と同じご指摘で大変失礼いたしました、、さっそく編集します!いつもありがとうございます!
退会済みユーザー

退会済みユーザー

2023/04/13 00:21

ListView はやめて DataGridView を使うことはできませんか?
doidoi1104

2023/04/13 00:26

ほんと仰る通りですよね、私が実装したい事をネットや書籍で調べてもDataGridViewの記事ばかりで、ご回答いただいた方もDataGridViewのほうがいいと仰ってましたのでそちらのほうが主流?なのかなと思っています、、ListViewの事を調べるとAndroidの記事も出てきたりして知識のない私は混乱していました、お優しく助言してくださり、ありがとうございます。もう少し頑張ろうと思います
guest

回答2

0

ベストアンサー

クラスPersonのデータをListに保存し、ListのデータをListViewに表示させたいです

まずWindows FormsのListVewは、任意のクラスを表示する機能はありません。
List<Person>に保存しても構いませんが、ListViewにも追加しなければならず結局2重管理になります。

DataGridViewを利用すべき場面だと思います。


②Listの情報をリストビューに表示するコード
エラーは出てないのですが、何かが足りないきがして、、

空のアイテムを追加しています。


ListViewに強いこだわりがあるなら↓のようなライブラリを使ったほうがいいでしょう。
NuGet Gallery | ObjectListView.Official 2.9.1
ObjectListView — ObjectListView 2.9.1 documentation

cs

1using System; 2using System.ComponentModel; 3using System.Windows.Forms; 4 5namespace Q7kx68m05p3ypf7 6{ 7 public partial class Form1 : Form 8 { 9 //private readonly List<Person> personlist = new List<Person>(); 10 private readonly BindingList<Person> personlist = new BindingList<Person>(); 11 12 public Form1() 13 { 14 InitializeComponent(); 15 16 // DataListView(ライブラリ)はpersonlistに追加されると自動反映 17 dataListView1.DataSource = personlist; 18 } 19 20 private void button1_Click(object sender, EventArgs e) 21 { 22 var person = new Person 23 { 24 Name = txtName.Text, 25 Age = int.Parse(txtAge.Text), 26 Gender = txtGender.Text, 27 }; 28 personlist.Add(person); 29 30 // ListViewItemを作って追加(2重管理) 31 var item = new ListViewItem(person.Name); 32 item.SubItems.Add(person.Age.ToString()); 33 item.SubItems.Add(person.Gender); 34 listView1.Items.Add(item); 35 } 36 } 37 38 public class Person 39 { 40 public string Name { get; set; } 41 public int Age { get; set; } 42 public string Gender { get; set; } 43 } 44}

アプリ画像

投稿2023/04/12 10:45

編集2023/04/13 03:36
TN8001

総合スコア9317

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

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

doidoi1104

2023/04/13 00:32

ご回答ありがとうございます!とても丁寧にコード記載いただき本当に感謝しています。 分からない事だらけの初心者なので機会があればまたよろしくお願いいたします 勉強頑張ります、ありがとうございます!
TN8001

2023/04/13 03:36

DataGridViewもプロパティをいじるだけでかなりListViewに寄せられます(画像だけ差し替えました) まあ無理して寄せる必要もないとは思いますが^^; DataGridViewは高機能な分難しいところもあるかと思いますが、わからないところがあったらまた質問してください^^
guest

0

私が実装したい事をネットや書籍で調べてもDataGridViewの記事ばかりで、ご回答いただいた方もDataGridViewのほうがいいと仰ってましたのでそちらのほうが主流?なのかなと思っています

何らかのデータソース(例えば SQL Server とか CSV ファイルとか)の内容一覧を表示して、ユーザーがその一覧を見て追加、削除、変更を行い、その結果を元のデータソースに反映するということを考えているなら、List<T> に代えて DataTable を、ListView に代えて DataGridView を使って、以下のような構成にすることをお勧めします

データソース ⇔ DataTable ⇔ BindingSourece ⇔ DataGridView

データソースが SQL Server の場合は、Visual Studio のデータソース構成ウィザードを使って自力では一行もコードを書かないでアプリを作成できます。

新しいデータ ソースの追加
https://learn.microsoft.com/ja-jp/visualstudio/data-tools/add-new-data-sources?view=vs-2022

データソースが CSV の場合の例は以下の記事を見てください。

CSV ファイルを DataGridView に表示
http://surferonwww.info/BlogEngine/post/2020/09/11/show-date-in-csv-file-on-datagridview.aspx

XML ファイルの場合でも同じようにできます。

XML ファイルを DataGridView に表示
http://surferonwww.info/BlogEngine/post/2019/04/26/show-content-of-xml-file-on-datagridview.aspx

投稿2023/04/13 01:01

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

doidoi1104

2023/04/13 01:10

ご丁寧にありがとうございます!早速リンク確認し調べてみます、、とても詳しく書いてくださり本当にうれしいです!ありがとうございます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問