2017-04-08 143 views
0

我有一个datagridview,并在构造函数中将Datagrid值绑定为数据表。DataGridView列顺序无法正常工作

我在运行时更改列的顺序。我隐藏的一些列和我重新排列的一些列。 (列是动态的,有时候我有10个,有时候我有20列)

隐藏列是不可见的。这很好。但是重新排列的列没有正确的顺序。

我在这里错过了什么吗?

这里是我的代码:

Public Class() 
    { 
     myGrid.DataSource = gridDataTable; 
    } 


    List<int> columnsOrder;   //Order index values 
    List<string> columnNameFromExcel; // Hiding column strings 

    private void VisibleColumns() 
    { 
     for (int i = 0; i < myGrid.ColumnCount; i++) 
     { 
      //Hiding columns based on some logics 
      if(!columnNameFromExcel.Values.Contains(myGrid.Columns[i].DataPropertyName)) 
      { 
       myGrid.Columns[i].Visible = false; 
      } 

      //Changing the display index    

      myGrid.Columns[i].DisplayIndex = columnsOrder[i]; 
     } 
    } 

任何帮助将非常感激。

Actual Result: 
Column3 Column4 Column5 Column1 Column2 

Expected Result: 
Column1 Column2 Column3 Column4 Column5 

注: 我已经编辑我的问题,以避免混乱。分配显示索引很好。我在运行时检查了它。没有重复。但仍然有些专栏的顺序在执行后没有妥善安排。

+0

目前还不清楚'一些condition'是什么'columnsOrder'包含?假设它包含所有列的顺序例如:列表中的元素0是列0的显示索引,元素1是列1显示索引...等等,那么为什么你要循环访问这个列表。不会简单地设置MyGrid.Columns [i] .DisplayIndex = columnsOrder [i];'...工作? – JohnG

+0

再一次,目前还不清楚这两个名单包含什么。我将不得不猜测'columnsOrder'列表将不得不包含所有的列,否则你怎么知道ints引用的列?另一方面,可见的列可能只是您想要隐藏的列的列表。 – JohnG

+0

我编辑了我的问题以避免混淆。分配显示索引很好。我在运行时检查了它。没有重复。但是,仍然有些列顺序执行后没有正确安排 –

回答

0

您可以使用以下要使用的DisplayIndex列的排列顺序,

private void makeColumnOrder() 
{ 
    customersDataGridView.Columns["Column1"].DisplayIndex = 0; 
    customersDataGridView.Columns["Column2"].DisplayIndex = 1; 
    customersDataGridView.Columns["Column3"].DisplayIndex = 2; 
} 
+0

它将运行在一个循环中。而且,这些值是动态的。我无法分配静态值。我更新了我的问题。请看看 –

+0

即使thogh值是动态的,列也是一样的。 – Sajeetharan

+0

该列本身是动态的。有时我有10个,有时候我有20个。我需要的是,我必须重新排列运行时的列 –