我遇到了WPF DataGrid的问题。 我尝试清空datagrid,添加列并用数据库中的数据填充它,然后隐藏1列,这是用户不需要查看的id。
但是当我尝试时,它表示DataGrid columnsCount为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个其他DataGrids上,如果我想隐藏它们中的列,我必须用一种方法填充它们。
我试图找到答案,但我失败了,并且按照我的方式修复了。
答案 0 :(得分:0)
您编程的方式,我建议创建一个datacolumn对象,然后将该datacolumn对象插入datatable。有了它,您可以使用其位置引用数据列。
...
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对象。这是我过去使用的伪绑定技巧。