実現したいこと
Prism, Dapperを使用して、SQLiteから取得したデータをDataGridに表示したいです。
製作中のアプリケーションはテーブル定義がインストール後に決定するため、事前にデータの構造をクラス等に定義することができません。
現在、SQLiteから取得したデータは、ObservableCollection<dynamic>型で保持しています。
発生している問題・分からないこと
SQLiteから得たデータがDataGridに表示されますが、同じカラムが2度表示されます。
SQLite側のデータが[A,B,C]と並んでいるとすると、実行した画面には[A,B,C,A,B,C]のように表示されます。
ブレークポイントを置いて表示する前のデータを確認したところ、カラムの重複はありませんでした。
DataGridにバインドした変数にマウスポインタを置くと、
{{DapperRow, A = 'TEST', B = '26', C = 'QWER'……
のように表示されます。
実行しているSQL文は、AS句でカラムに別名をつけていますが、単純なSELECT文で、テーブルの結合はしていません。
エラーメッセージ
error
1エラーメッセージはありません。 2
該当のソースコード
C#
1//SQLiteから取得したデータを保持するプロパティ 2 private ObservableCollection<dynamic> _DataRows { get; set; } 3 public ObservableCollection<dynamic> DataRows 4 { 5 get => _DataRows; 6 set 7 { 8 _DataRows = value; 9 this.RaisePropertyChanged(nameof(DataRows)); 10 } 11 }
C#
1//SQL文の実行 2 public ObservableCollection<dynamic> GetDynamicDataWithDapper(string sqlQuery) 3 { 4 using (var connection = new SqliteConnection( $"Data Source={databasePath}")) 5 { 6 var results = connection.Query<dynamic>(sqlQuery); 7 return new ObservableCollection<dynamic>(results); 8 } 9 }
C#
1//DataGridに表示する 2 public void ShowTable(string Query) 3 { 4 DataRows = GetDynamicDataWithDapper(Query); 5 }
XAML
1<!-- UIとのバインド --> 2<DataGrid Grid.Row="1" Grid.Column="0" Name="dataGrid" IsReadOnly="True" AutoGenerateColumns="True" EnableColumnVirtualization="True" ItemsSource="{Binding DataRows}" />
試したこと・調べたこと
- teratailやGoogle等で検索した
- ソースコードを自分なりに変更した
- 知人に聞いた
- その他
上記の詳細・結果
類似の事例が見つからず、参考にできませんでした。
UIとのバインドについては、Prismを使用している場合
SetProperty(ref _DataRows, value);
のように記述する例を多く見ましたが、
「CS0206 参照を返さないプロパティまたはインデクサーを out 値または ref 値として使用することはできません」
とエラーが表示されるため、
this.RaisePropertyChanged(nameof(DataRows));
のようにしています。
補足
特になし
回答1件
あなたの回答
tips
プレビュー
2025/11/26 06:16
2025/11/26 06:44
2025/11/26 08:56