隐藏数据网格WPF中的列

0g0grzrc  于 2023-01-18  发布在  其他
关注(0)|答案(3)|浏览(223)

我希望在WPF DataGrid中显示数据库中的一个表。但是,我希望隐藏第一列。此列定义了所有项的ID。我需要ID以执行进一步操作,但是我不希望在DataGrid中显示它。我尝试了下面的代码,但是在最后一行出现错误,即索引必须大于0。

DbMainTable.ItemsSource = dataHandler.visibleDatabaseTable.DefaultView;
DbMainTable.Columns[0].Visibility = Visibility.Hidden;

如果有人能帮助我,请告诉我。

0md85ypi

0md85ypi1#

问题是,当您尝试设置列的可见性时,它还不存在。
试试这个:
在构造函数中:

DbMainTable.ItemsSource = dataHandler.visibleDatabaseTable.DefaultView;
DbMainTable.AutoGeneratedColumns += DbMainTable_OnAutoGeneratedColumns;

如下:

private void DbMainTable_OnAutoGeneratedColumns(object? sender, EventArgs e)
{
    DbMainTable.AutoGeneratedColumns -= DbMainTable_OnAutoGeneratedColumns;
    DbMainTable.Columns[0].Visibility = Visibility.Hidden;
}
jslywgbw

jslywgbw2#

你能提供更多关于这个问题的信息吗?很难猜测代码的哪一部分不工作。
但如果我猜你使用自动生成的列,你试图隐藏这个列之前,它被添加到数组列。
我试图用自动生成的列来做这件事,它给了我和你得到的一样的异常。
要解决此问题,请将此部分代码移至已加载此数据网格(及其列)的位置-例如,移至代码隐藏中的OnLoaded事件处理程序
为此:
在后面代码中添加此方法

private void DbMainTable_OnLoaded(object sender, RoutedEventArgs e)
    {
        DbMainTable.ItemsSource = dataHandler.visibleDatabaseTable.DefaultView;
        DbMainTable.Columns[0].Visibility = Visibility.Hidden;
    }

在XAML中:

<DataGrid x:Name="DbMainTable"
                      Loaded="DbMainTable_OnLoaded"
                      Grid.Column="0" />
nhjlsmyf

nhjlsmyf3#

如果您需要id,但不想在网格中看到列,那么我认为最简单的方法是首先不添加列。
使用visibleDatabaseTable中的数据。

private void DbMainTable_AutoGeneratingColumn(object sender, DataGridAutoGeneratingColumnEventArgs e)
 {
     if ((string)e.Column.Header == "Id")
     {
         e.Cancel = true;
     }
 }

在数据网格上:

<Datagrid .....
     AutoGeneratingColumn="DbMainTable_AutoGeneratingColumn"/>

相关问题