0

是否可以将查询结果直接设置为 DataGrid(不映射到对象)。我有一些动态报告,我只想在网格中显示它,而不是设置列等。

通常这不是问题,因为我将数据“映射”到模型中的对象,例如:

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;
4

2 回答 2

0

您需要将“select * from Events”查询的结果映射到IEnumerable某种方式。

您当然可以使用 anSQLiteDataReader并将匿名对象添加到ItemsSource. 像这样的东西:

System.Collections.ArrayList list = new System.Collections.ArrayList();
using (var db = new SQLiteConnection(new SQLite.Net.Platform.Generic.SQLitePlatformGeneric(), "zakupy.db"))
{
    db.Open();
    const string sql = "select * from Events";
    SQLiteCommand command = new SQLiteCommand(sql, db);
    SQLiteDataReader reader = command.ExecuteReader();
    while (reader.Read())
        list.Add(new { Name = reader["name"].ToString() });
}
lstPersons.ItemsSource = list;

我真的不明白你为什么要这样做而不是绑定到泛型IEnumerable<T>

无论如何,您可以设置或绑定ItemsSourceaDataGridListView任何IEnumerable。就控件而言,您选择如何填充此序列并不重要。

于 2017-05-17T13:30:36.377 回答
0

好的,这就是我的想法:

 string ConString = "sale.db";
 string passedquery = "select * from Events";
        DataTable dt = new DataTable();
        using (SQLiteConnection con = new SQLiteConnection(ConString))
        {
            try
            {
                using (var statement = con.Prepare(passedquery))
                {
                    for (int i = 0; i < statement.ColumnCount; i++)
                    {
                        dt.Columns.Add(statement.ColumnName(i));
                    }
                    while (statement.Step() == SQLiteResult.ROW)
                    {

                        DataRow dr;
                        dr = dt.NewRow();

                        for (int i = 0; i < statement.ColumnCount; i++)
                        {
                            dr[i] = statement[i];
                        }
                        dt.Rows.Add(dr);
                    }
                }
            }

            catch(SQLitePCL.SQLiteException)
            {

                MessageBox.Show("Nieprawidłowe zapytanie");
            }             
        }
        dtgCustomReport.DataContext = dt.DefaultView;

但我仍然不知道这是不是最简单的方法:)

于 2017-05-17T13:58:54.360 回答