隐藏datagrid的最后一列无法正常工作

时间:2018-12-02 09:18:51

标签: c# wpf datatable datagrid

我从数据中读取了一些数据到数据,然后将数据表的内容显示为数据网格数据表是我们的主键,我试图向用户隐藏此列,我尝试过:

在我的XAML中,我具有datagrid:

<DataGrid  Name="myDG" />

在后面的代码中:

 public MyPage()
 {
   InitializeComponent();
   myDG.ItemsSource= this.myDataTable.DefaultView;//<-- dataTable with some data
   myDG.Columns[myDG.Columns.Count - 1].Visibility = Visibility.Collapsed;//<--- this line gives exeption
  }

我得到了证明:

  

System.ArgumentOutOfRangeException:'索引超出范围。必须为非负数,并且小于集合的大小。

但是,如果我将行添加到其他地方,一切正常,我的意思是:

void Some_Btn(object sender, RoutedEventArgs e)
{
   myDG.Columns[myDG.Columns.Count - 1].Visibility = Visibility.Collapsed;
 // now it works fine and hides the last column
}

1 个答案:

答案 0 :(得分:0)

这是因为,默认情况下,DataGrid使AutoGenerateColumns = true和数据网格的itemsource在构造函数中分配,但是直到在窗口中显示列时才生成列。

如果您进行调试,然后通过watch / Quick Watch中的以下代码检查DataGrid中的列。

 YourDataGridName.Columns.Count

此计数将为零。

与其在Some_Btn或Button click事件中传递可见性,不如在Windows_Loaded事件中进行可见性。 您的问题将得到解决。

建议:-如果您的列数最少而不是AutoGenerateColumns,请通过Xaml在DataGrid中创建列。