我在使用 WPF DataGrid 时遇到了问题。我尝试清空数据网格,添加列并用数据库中的数据填充它,然后隐藏 1 列,这是用户不需要看到的 id。
但是当我尝试时,它说 DataGrid 列计数为 0,即使在方法末尾添加所有内容后也是如此。在执行第一个方法后,我什至试图将其隐藏在另一种方法中,但仍然出现相同的错误。所以我的诀窍非常混乱,我想学习如何以更好的方式做到这一点。
这是我向 DataGrid 插入列等的简单代码:
private void insertSubjects()
{
DataSet dataSet = DBConnect.Instance.getSubjects();
DataTable subjects = new DataTable();
subjects.Columns.Add("id", typeof(int));
subjects.Columns.Add("Przedmiot", typeof(string));
foreach(DataTable table in dataSet.Tables)
{
foreach(DataRow row in table.Rows)
{
subjects.Rows.Add(row["id"], row["name"]);
}
}
subjectsTable.ItemsSource = subjects.DefaultView;
new Thread(new ThreadStart(hideColumns)).Start();
}
我在这里修复的是执行方法的新线程,它执行另一个线程,因为我需要通过 Dispatcher.Invoke 执行此操作,如下所示:
private void hideColumns()
{
while (subjectsTable.Columns.Count == 0)
{ }
this.Dispatcher.Invoke(hideColumns2);
}
private void hideColumns2()
{
subjectsTable.Columns[0].Visibility = Visibility.Hidden;
}
问题是当我在 1 个页面或窗口上,另外 2 个 DataGrid 上,如果我想隐藏它们中的列,我必须用一种方法填充它们。
我试图找到答案,但我失败了,并修复了我的方式。
按照您编程的方式,我建议创建一个数据列对象,然后将该数据列对象插入到数据表中。有了它,您可以使用其位置引用数据列。
...
DataTable subjects = new DataTable();
DataColumn idColumn = new DataColumn("id", typeof(int));
// You can set various properties of the DataColumn.
// MSDN Documentation: https://msdn.microsoft.com/en-us/library/x1tyd60z%28v=vs.110%29.aspx
subject.Columns.Add(idColumn);
现在,您应该能够访问特定列以引用实际的 DataColumn 对象。这是我过去使用过的伪绑定技巧。