【问题标题】:Binding dynamic query to DataGrid C# WPF将动态查询绑定到 DataGrid C# WPF
【发布时间】:2017-10-13 07:41:42
【问题描述】:
是否可以在不指定表或列的情况下将查询绑定到数据网格?
假设我有这个查询:
string query = "select PersonName from Persons'
但它会改变,下次我有:
string query = "select Email from Persons'
我正在使用 Sqlite Net 扩展,但在没有明确指定表对象的情况下绑定有问题,例如:
listPerson.DataContext = db.Query....
【问题讨论】:
标签:
c#
wpf
sqlite
sqlite-net
sqlite-net-extensions
【解决方案1】:
是的,您可以将任何表或列动态绑定到数据网格。
首先在 xaml 代码中验证您的列:
<DataGrid x:Name="dataGrid" >
<DataGrid.Columns>
<DataGridTextColumn Header="col1" Binding="{Binding col1}">
<DataGridTextColumn Header="col2" Binding="{Binding col2}">
</DataGrid.Columns>
</DataGrid>
在绑定数据后面的代码中对您进行 xaml 编码后
private void FillDataGrid()
{
var query = Context.Database.SqlQuery<Table>("Select * From table");
var result = query.ToList();
dataGrid.ItemsSource = result ;
}
【讨论】:
-
谢谢,我认为在 中我必须指定表对象。现在它正在工作。但是列仍然有问题。我已经在网格中有一些数据,但是可以不指定列的标题,我想显示的列仅取决于查询中指定的这些。
【解决方案2】:
让我再解释一下我的问题。
我想做一些动态报告。我使用带有 SQLite NET 扩展的 SQLite 数据库。我从 xml 文件加载查询(此查询可以是数据库中的任何内容)。我想以某种方式将此查询的结果加载到网格或列表视图。
通常这不是问题,因为我将数据“映射”到模型中的对象,例如:
using (var db = new SQLiteConnection(new SQLite.Net.Platform.Generic.SQLitePlatformGeneric(), "zakupy.db"))
{
listPerson = db.Table<Persons>().Where(x => x.Property == "P" && x.Status == 0).ToList();
}
lstPersons.DataContext = listPerson;
现在我尝试做这样的事情:
using (var db = new SQLiteConnection(new SQLite.Net.Platform.Generic.SQLitePlatformGeneric(), "zakupy.db"))
{
var cc = db.Query<Table>("SELECT * from Events");
lstPersons.DataContext = cc.ToList();
}
但在网格中我只看到这样的内容: