【问题标题】:WPF DataGrid ColumnCountWPF 数据网格列数
【发布时间】: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 中删除列的问题。感谢您的回复。

标签: c# wpf datatable datagrid


【解决方案1】:

你可以试试

   NameDG.Loaded += NameDG_Loaded;

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

【讨论】:

    【解决方案2】:

    为了关闭这个帖子,我会在找到解决方案后自己回答这个问题。

    1. 您可以直接从DataTable 中删除列,例如通过这个(感谢没人)

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

    1. 使用来自DataGridAutoGeneratedColumns 事件处理程序

    【讨论】:

      【解决方案3】:

      如果你点击列名,它有一个负值,具体值为-1,你需要使用 IF STATEMENT 来验证它

      使用此事件来防止错误

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

      }

      【讨论】:

      • 感谢您的回答,但我解决了直接删除 DataTalbe 的列。但我认为您的代码不会解决我的问题,因为我希望在开始时而不是在 ClickEvent 之后删除列。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-07-21
      • 2017-06-16
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多