はじめに
初めまして、現在大学3年生でWindowsのアプリケーション開発を行なっております。
今回は WPF と呼ばれるWindowsアプリケーション用に使用するフレームワークで使用するC#の記事になります。
WPFを使用する際には、UIの作成にXAML、クリックイベントやバックエンドにC#と言語を分けて作成します。
今回は、選択してる行を取得する方法を書いていきたいと思います。
今回やりたいこと
DataGridから列を複数選択し、それぞれのデータを取得したいと考えています。
今回は以下のようなデータを使用したいと思います。
ID | 店名 | 前回の連絡日付 | 次回の連絡日付 | 担当者 |
---|---|---|---|---|
1 | 俺のリップクリーム | 2022-3-18 | 2022-3-22 | 山田太郎 |
2 | 俺のスマホ | 2022-3-18 | 2022-3-22 | 高橋花子 |
3 | 俺の天津飯 | 2022-3-18 | 2022-3-23 | ああ二郎 |
4 | 俺のチャオズ | 2022-3-18 | 2022-3-23 | ああ二郎 |
取得した上でtextboxに取得したものを代入するプログラムを作る設定でプログラムを書いていきます。
複数行取得した際には、「,(カンマ)」で続けて書きたいと思います。
DataGeidの行を取得する方法
今回使用する上で必要なデータの型
DataGridのColumn名が入ったリストを使用します。
今回は以下の情報が入ったリストです。
ID | 店名 | 前回の連絡日付 | 次回の連絡日付 | 担当者 |
---|
private List<string> Column_list = new List<string>();
Xamlの情報
今回のXamlには、DataGridとID, 店名、前回の連絡日付、次回の連絡日付、担当者のTextBoxがあるとします。
<DataGrid/>
<TextBox x:Name="ID_textbox"/>
<TextBox x:Name="Shop_textbox"/>
<TextBox x:Name="pre_day_textbox"/>
<TextBox x:Name="post_day_textbox"/>
<TextBox x:Name="manager"/>
取得する方法
foreachを利用して、一行一行選択した項目の中身を確認します。
foreach (var row in this.datagrid.SelectedItems)
現在選択している行のうち、header_strと同じ列を取得します。
この時、行を取得する方法としてDataRowViewを使用します。
var row_data = (row as DataRowView)[header_str];
private void row_get()
{
string[] row_list = [Column_list.Count()]
foreach (var row in this.datagrid.SelectedItems)
{
int i = 0;
int j = 0;
foreach (string column in Column_list)
{
if(j!= 0)
row_list[i] += ", ";
var row_data = (row as DataRowView)[header_str];
row_list[i] += row_data.ToString();
i++;
}
j++;
}
this.ID_textbox.Text = row_data[0];
this.Shop_textbox.Text = row_data[1];
this.pre_day_textbox.Text = row_data[2];
this.post_day_textbox.Text = row_data[3];
this.manager_textbox.Text = row_data[4];
}
プログラム結果
例えば、DataGridの一行目、二行目を選択すると、textboxの中身は以下のようになります。
ID 1, 2
店名 俺のリップクリーム, 俺のスマホ
前回の連絡日付 2022-3-18, 2022-3-18
次回の連絡日付 2022-3-22, 2022-3-22
担当者 山田太郎, 高橋花子