2017-04-08 140 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個。我需要的是,我必須重新排列運行時的列 –