我有一个用 DataView 填充的 DataGrid(使用 DataContext)。我试图在一个单独的线程中执行此操作,但 UI 仍然冻结。我想防止 UI 在填充 DataGrid 时冻结。
这是我到目前为止制作的代码:
private void btnOK_Click(object sender, RoutedEventArgs e)
{
GetFieldsBLL getFieldsBLL = new GetFieldsBLL();
DataView dv = getFieldsBLL.GetWholeView(ViewName);
Task task = new Task(() => ucDataExtracViewControl.PopulateGrid(dv));
task.Start();
}
public void PopulateGrid(DataView dv)
{
dgView.Dispatcher.BeginInvoke(DispatcherPriority.Normal, new Action(delegate{
dgView.Columns.Clear();
dgView.AutoGenerateColumns = false;
foreach (DataColumn column in dv.Table.Columns)
{
var gridColumn = new DataGridTextColumn()
{
Header = column.ColumnName,
Binding = new Binding("[" + column.ColumnName + "]")
};
dgView.Columns.Add(gridColumn);
}
dgView.DataContext = dv;
DataView = dv;
}));
}
提前致谢!
编辑:我重新创建列的原因是因为某些列名的名称中有一个点。例如“工作编号”。使用绑定时不会产生任何数据。在此处阅读更多内容:带点的 DataTable 列名称是什么导致它们不适合 WPF 的 DataGrid 控件?不能对数据库进行更改。——</p>