2017-09-04 65 views
-1

我有一个DataGridDataTableDataGrid.ItemsSourceWPF DataGrid ColumnCount

到目前为止,一切正常,数据显示在DataGrid正如我所希望的那样。 现在我想隐藏DataGrid的一些列。我以前做过这件事,它工作正常,但不知何故,我总是得到一个错误说

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

我知道这是什么意思,但我不明白为什么会这样

这里是我的代码:。

adapter.Fill(datatable); 
NameDG.ItemsSource = datatable.DefaultView; 

//Hide Column[1] 
NameDG.Columns[1].Visibility = Visibility.Hidden; 

DataGrid有超过10列。

感谢您的帮助。

+0

您的适配器是否实际返回任何数据?您是否尝试过调试它,并检查(例如)返回数据的列数? – ainwood

+0

当您调试时,NameDG.Columns的内容是什么?什么是NameDG.Columns.Length? – Staeff

+1

如果不需要该数据列,则可以删除该列,该数据列不会显示在DataGrid中 –

回答

0

,以验证它只是关闭这个线程我会回答这个问题后,我发现我的解决方案。

  1. 可以直接从DataTable像例如通过这个DELET列(由于没有人)

    datatable.Columns.Remove(datatable.Columns[0]); 
    

  • 使用来自DataGridAutoGeneratedColumns事件处理程序
  • 0

    如果您单击列名这是有一个负价值的具体值是-1ÿ OU需要使用if语句

    利用这个事件来防止错误

    private void dataGridView1_CellDoubleClick(object sender, DataGridViewCellEventArgs e) 
    { 
    int rowIndex = e.RowIndex; 
    if(rowIndex <= -1) 
    { 
    //Error 
    } 
    else 
    { 
    //Your Code 
    } 
    

    }

    +0

    感谢您的回答,但我解决了直接删除DataTalbe的列。但我不认为你的代码能够解决我的问题,因为我希望在开始时删除列,而不是在ClickEvent之后删除。 – Morris

    0

    您可以试试

    NameDG.Loaded += NameDG_Loaded; 
    
        void NameDG_Loaded(object sender, RoutedEventArgs e) 
        { 
         NameDG.Columns[1].Visibility = Visibility.Collapsed; 
        }