teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

1

追記

2021/09/11 05:59

投稿

退会済みユーザー
answer CHANGED
@@ -224,4 +224,61 @@
224
224
 
225
225
  結果は:
226
226
 
227
- ![イメージ説明](fe6031b85072d68070d574b08f158d45.jpeg)
227
+ ![イメージ説明](fe6031b85072d68070d574b08f158d45.jpeg)
228
+
229
+ **【追記】**
230
+
231
+ YAmaGNZ さんの質問欄のコメントを見て思ったのですが、MainWindow のコンストラクタの CreateDataTable() で生成した DataTable は DataGrid に表示できているが、imp_button_Click メソッドで DataTable を再生成しても、DataGrid には再生成結果が反映されないという話なのかな?
232
+
233
+ そうであれば、上の回答の MainWindow.xaml.cs のコードで書いたように、コードで明示的に DataGrid.ItemsSource に DataTable.DefaultView を設定してみたらどうなりますか?
234
+
235
+ 先の MainWindow.xaml.cs のコードに手を加えて、コンストラクタでダミーの DataTable を作ってそれを DataGrid に表示した後、Button クリックで DataTable を差し替えるということを試してみましたが、期待通りに差し替えることができます。お試しください。
236
+
237
+ ```C#
238
+ // ・・・前略・・・
239
+
240
+ testDatabaseService = provider.GetRequiredService<TestDatabaseService>();
241
+
242
+ this.dataGrid2.ItemsSource = CreateDataTable().DefaultView;
243
+ }
244
+
245
+ private async void Button1_Click(object sender, RoutedEventArgs e)
246
+ {
247
+ var table = await testDatabaseService.GetDataTableAsync();
248
+ this.dataGrid2.ItemsSource = table.DefaultView;
249
+ }
250
+
251
+ private async void MainWindow_Loaded(object sender, RoutedEventArgs e)
252
+ {
253
+ var list = await testDatabaseService.GetListAsync();
254
+ this.dataGrid.ItemsSource = list;
255
+
256
+ //var table = await testDatabaseService.GetDataTableAsync();
257
+ //this.dataGrid2.ItemsSource = table.DefaultView;
258
+ }
259
+
260
+ private DataTable CreateDataTable()
261
+ {
262
+ var table = new DataTable();
263
+ table.Columns.Add(new DataColumn("Num", typeof(int)));
264
+ table.Columns.Add(new DataColumn("Name", typeof(string)));
265
+ for (int i = 0; i < 3; i++)
266
+ {
267
+ var row = table.NewRow();
268
+ row["Num"] = i;
269
+ row["Name"] = $"Name{i}";
270
+ table.Rows.Add(row);
271
+ }
272
+ return table;
273
+ }
274
+ }
275
+ }
276
+ ```
277
+
278
+ 初期表示:
279
+
280
+ ![イメージ説明](7a8103d2ba625ba893dc5c5e80079c9f.jpeg)
281
+
282
+ Button クリックで:
283
+
284
+ ![イメージ説明](d91f03fffa0208dd014605d41e892dff.jpeg)