2012-07-03 44 views
1

我有一個網格有4個頻帶,頻帶[3]中的列沒有按照其父頻段排列。我的主要要求是安排Band [3]列。 這是「導出到Excel」代碼的一部分。網格已經顯示在表單中。 我曾嘗試下面的方法 -需要幫助安排多波段Infragistics中的列UltrawinGrid

private UltraGrid rearrangeCol(UltraGrid grid) 
    { 
     int bandCount = grid.DisplayLayout.Bands.Count; 
     int band = 0; 
     List<String> colPos = new List<string>(); 
     for (int i = grid.DisplayLayout.Bands[band].Columns["EndurEndInv"].Index; i < grid.DisplayLayout.Bands[band].Columns.Count; i++) 
     { 
      colPos.Add(grid.DisplayLayout.Bands[band].Columns[i].Key); 
     } 
     band++; 
     while (band < bandCount) 
     { 
      int initialColPos = grid.DisplayLayout.Bands[band].Columns["EndurEndInv"].Index; 
      for (int i = initialColPos, j = 0; i < grid.DisplayLayout.Bands[band].Columns.Count && j < colPos.Count; i++, j++) 
      { 
       if(!grid.DisplayLayout.Bands[band].Columns[i].Key.Equals(colPos[j], StringComparison.InvariantCulture)) 
       { 
        grid.DisplayLayout.Bands[band].Override.AllowColSwapping = Infragistics.Win.UltraWinGrid.AllowColSwapping.WithinBand; 
        int xcngPos = grid.DisplayLayout.Bands[band].Columns[colPos[j]].Index; 
        grid.DisplayLayout.Bands[band].Columns.Insert(i, "Temp"); 
        grid.DisplayLayout.Bands[band].Columns[xcngPos + 1].Swap(grid.DisplayLayout.Bands[band].Columns[i]); 
        grid.DisplayLayout.Bands[band].Columns.Remove("Temp"); 
        grid.DisplayLayout.Bands[band].Override.AllowColSwapping = Infragistics.Win.UltraWinGrid.AllowColSwapping.Default; 

       } 
       else 
        continue; 
      } 
      band++; 

     }; 
     return grid; 
    } 

其實,當我使用SWAP,按鍵沒有反應,指數保持不變。 有沒有更好的方法?

回答

1

是,重新安排你需要在

grid.DisplayLayout.Bands[index].Columns[colName].Header.VisiblePosition = newPos; 

無需交換列位置工作柱的側向承載力位置,只需重新排列頭的位置。

此代碼下面尚未經過測試和我寫作爲一個例子

private UltraGrid rearrangeCol(UltraGrid grid) 
    { 
     int bandCount = grid.DisplayLayout.Bands.Count; 
     int band = 1; 

     UltraGridBand b0 = grid.DisplayLayout.Bands[0]; 
     while (band < bandCount) 
     { 
      UltraGridBand b = grid.DisplayLayout.Bands[band] 
      for (int i = b0.Columns["EndurEndInv"].Index; i < b0.Columns.Count; i++) 
      { 
       string colKey = b0.Columns[i].Key; 
       if(b.Columns.Exists(colKey)) 
        b.Columns[colKey].Header.VisiblePosition = 
            b0.Columns[colKey].Header.VisiblePosition; 
      } 
      band++; 
     } 
     return grid; 
    }