我读了这个问题:BackgroundWorker to read database and update GUI
并认为,这是解决这个问题的好方法。唯一的事情是,我动态地创建了我的列。
我从数据库中读取 schemaInfo 以获取 ColumnNames 并在数据库中为每个列创建一个 DataGridColumn。
现在我想用 BackgroundWorker 来做这件事,但是你不能用 BackgroundWorker 更新 UI。
现在(没有 BackgroundWorker)我有 2 种方法来获取数据库值。
要加载列:
using (MySqlDataReader reader = cmd.ExecuteReader())
{
using (DataTable schema = reader.GetSchemaTable())
{
foreach (DataRow col in schema.Rows)
{
DataGridTextColumn column = new DataGridTextColumn();
string columnstring = col.Field<String>("ColumnName");
comboFilter.Items.Add(UppercaseFirst(columnstring));
column.Binding = new Binding(col.Field<String>("ColumnName"));
column.Header = UppercaseFirst(col.Field<String>("ColumnName"));
column.IsReadOnly = true;
Style textStyle = new Style(typeof(TextBlock));
textStyle.Setters.Add(new Setter(TextBlock.TextWrappingProperty, TextWrapping.Wrap));
column.ElementStyle = textStyle;
dataGridPrivatecustomers.Columns.Add(column);
}
}
}
加载值
using (MySqlDataAdapter dataAdapter = new MySqlDataAdapter(string.Format("SELECT * FROM {0}", privateCustomerTablename), connection))
{
using (DataTable dt = new DataTable())
{
dataAdapter.Fill(dt);
dataGridPrivatecustomers.ItemsSource = dt.DefaultView;
}
}
因此,我尝试将两者合二为一,并努力为 DataGrad 的 ItemSource 创建结果列表:
using (MySqlDataReader reader = cmd.ExecuteReader())
{
int i = 0;
while (reader.Read())
{
using (DataTable schema = reader.GetSchemaTable())
{
foreach (DataRow row in schema.Rows)
{
results.Add(new
{
});
i++;
}
}
}
}
问题是,我需要知道如何将 ColumnName + Value 放入结果列表中。
在链接的问题中,他做了
Id = rdr.GetInt32(0),
但我做不到row.Field<String>("ColumnName") = reader[i].ToString()
代码也不知道要添加多少列,所以我想我需要另一个 for 或 foreach 循环?以及如何设置 ColumnName ?