朝早く起きてしまったので、昨日の復習を書きます。
昨日はC1.WPF.DataGridのテキストボックス列(デフォルト)からコンボボックス列へ変更する処理をしました。
以下はそのコードです。
private void c1DataGrid_AutoGeneratingColumns(object sender, C1.WPF.DataGrid.DataGridAutoGeneratingColumnsEventArgs e) { if(e.Property.Name == "aaaa") { //コンボボックス設定 var cmbClmn = new C1.WPF.DataGrid.DataGridComboBoxColumn(e.Property); cmbClmn.DisplayMemberPath = "a.NAME"; cmbClmn.SelectedValuePath = "a.CODE"; DataView dv = new DataView(this.aTbls.Tables["a.CODE"]); dv.RowFilter = "a.CODE.ccc = '00'"; DataTable dtCode = dv.ToTable(); List<Model> models = new List<Model>(); foreach(DataRow dr in dtCode.Rows) { Model data = new Model(); data.a.NAME = dr["a.CODE"].ToString() + " " + dr["a.NEME"].ToString(); data.a.CODE = dr["a.CODE"].ToString(); models.Add(data); } Model data1 = new Model(); data1.a.NAME = "00 その他"; data1.a.CODE = "00"; models.Add(data1); cmbClmn.ItemSource = models; } if(e.Property.Name == "bbbb") { var cmbClmn = new C1.WPF.DataGrid.DataGridComboBoxColumn(e.Property); cmbClmn.DisplayMemberPath = "a.NAME"; cmbClmn.SelectedValuePath = "a.CODE"; List<Model> models = new List<Model>(); Model data1 = new Model(); data1.a.NAME = "00 選択"; data1.a.CODE = "00"; models.Add(data1); cmbClmn.ItemSource = models; }
List
if文が2つあるのですが、Gridのヘッダー名で違った項目を表示することができるようにするためです。
1つ目のif文の中には、ループ文があります。
これは、もともとデータベースにあった項目を使用しているためです。
直接データベースからは持ってこれないので、
DataView dv = new DataView(this.aTbls.Tables["a.CODE"]); ←ここ
にて、DataViewの中身を指定したのちにフィルターをかけて使用する項目を指定しています。
2つ目はもともとある項目を使用していないので、新しい項目だけを追加しています。
また、デフォルトのテキストボックスだった時、各テキストボックスのデータは数字で表示されるようになっていました。
それはDtoから取得してきたデータが、数字であるためです。
それをこの処理をすることによって、数字の意味に適応した文字に変更しています。
変更したのは、数字だと何を意味しているのかわかりづらいからです。
以上です。
昨日はまだよくわかっていないListと、DataViewが作業で出てきました。
これで少し整理できてよかったです。