隐藏代码中的列生成WPF DataGrid

时间:2015-01-31 02:08:34

标签: c# wpf datagrid

我遇到了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上,如果我想隐藏它们中的列,我必须用一种方法填充它们。

我试图找到答案,但我失败了,并且按照我的方式修复了。

1 个答案:

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