隐藏代码生成的 WPF 数据网格中的列



我在使用 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 对象。这是我过去使用过的伪绑定技巧。

最新更新