我从数据库中读取了一些数据到数据表,然后将数据表的内容显示为数据网格数据表是我们的主键,我试图向用户隐藏此列,我尝试过:
在我的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
}
答案 0 :(得分:0)
这是因为,默认情况下,DataGrid
使AutoGenerateColumns = true
和数据网格的itemsource
在构造函数中分配,但是直到在窗口中显示列时才生成列。
如果您进行调试,然后通过watch / Quick Watch中的以下代码检查DataGrid中的列。
YourDataGridName.Columns.Count
此计数将为零。
与其在Some_Btn或Button click事件中传递可见性,不如在Windows_Loaded事件中进行可见性。 您的问题将得到解决。
建议:-如果您的列数最少而不是AutoGenerateColumns,请通过Xaml在DataGrid中创建列。