【发布时间】:2018-02-12 10:57:09
【问题描述】:
我有一个DataGrid 和一个DataTable 作为DataGrid.ItemsSource。
到目前为止,一切正常,数据如我所愿显示在DataGrid 中。
现在我想隐藏DataGrid 的一些列。我以前做过这个,效果很好,但不知何故我总是收到一个错误提示
"System.ArgumentOutOfRangeException: "索引超出范围。必须是非负数且小于集合的大小。”
我知道这意味着什么,但我不明白为什么会这样。
这是我的代码:
adapter.Fill(datatable);
NameDG.ItemsSource = datatable.DefaultView;
//Hide Column[1]
NameDG.Columns[1].Visibility = Visibility.Hidden;
DataGrid 有超过 10 个列。
感谢您的帮助。
【问题讨论】:
-
您的适配器实际上是否返回任何数据?您是否尝试过调试它,并检查(例如)返回数据的列数?
-
调试的时候,NameDG.Columns的内容是什么? NameDG.Columns.Length 是什么?
-
如果不需要,您可以删除数据列,这反过来不会显示在DataGrid中
-
尝试只隐藏第一列中的一个,这样行吗?请记住,索引是从零开始的 - 因此,如果您在不考虑这一点的情况下尝试隐藏最后一列,您将始终收到该错误。
-
好的,适配器正在返回数据,数据显示在 DataGrid 中,但不知何故 Column.Count 为 0,直到我第二次加载数据,然后才是真正的 Column.Count .我解决了像没人建议的那样直接从 DataTable 中删除列的问题。感谢您的回复。