はじめに
今回は WPF と呼ばれるWindowsアプリケーション用に使用するフレームワークで使用するC#の記事になります。
WPFを使用する際には、UIの作成にXAML、クリックイベントやバックエンドにC#と言語を分けて作成します。
今回やりたいこと
WPFのListView(DataGrid)で、取得したい情報をTextBoxから取得し、取得できた情報をListViewの選択した状態で返すプログラムを作成します。
なぜこのようなプログラムが必要なのか
ListViewで表示されている情報から、欲しいデータを取得することを目的とします。
しかし今回は、View表示している元データを保持していないので、Viewに表示している情報から検索をしたいと考えています。
実際に苦労したこと
List表示の際に、Itemsourceを利用すると思うが、そのデータをパブリック変数として保持せずに、ListView(DataGrid)内のメソッドで完結させるのが、苦労しました。
WPFのListView(DataGrid)の検索機能追加
今回使うデータ
今回使用するデータは以下のようになっているとします。
ID | 店名 | 前回の連絡日付 | 次回の連絡日付 | 担当者 |
---|---|---|---|---|
1 | 俺のリップクリーム | 2022-3-18 | 2022-3-22 | 山田太郎 |
2 | 俺のスマホ | 2022-3-18 | 2022-3-22 | 高橋花子 |
3 | 俺の天津飯 | 2022-3-18 | 2022-3-23 | ああ二郎 |
5 | 俺のチャオズ | 2022-3-18 | 2022-3-23 | ああ二郎 |
7 | 俺のヤムチャ | 2022-3-18 | 2022-3-23 | サブロー |
今回取得したい情報は入力したIDから、一致する列データを選択状態にするということをしたいと思います。
public void class Listitems
{
public int id {get; set;}
public string shop_name { get; set; }
public string pre_date { get; set; }
public string next_data { get; set; }
public string people { get; set; }
}
追加方法
ラムダ式を用いて、取得します。
numには、idを取得し、foundでは、条件に一致するデータの列情報を取得します。
num = Int32.Parse(textbox.text);
var found = listview.Items.Cast<Listitems>().Where(row => row.id == num).ToList();
listview.SelectedItems.Add(found[0]);
found[0]にしているのは、一行目のみ取得するためである。
もし複数の情報を取得したい場合はforeach文で回すと取得できると思います。