2012-04-11 32 views
7

我正在處理一個C#應用程序,其中包含大量空的DataGridViews。用戶必須從excel中複製/粘貼數據。我做的是以下幾點:Datagridview.SelectedCells order

int i = 0; 
string s = Clipboard.GetText(); 

// Separate lines 
string[] lines = Regex.Split(s, "\r\n"); 
foreach (string line in lines) 
{ 
    // Separate each cell 
    string[] cells = line.Split('\t'); 
    foreach (string cell in cells) 
    { 
     // If we selected as many cells as copied 
     if (dataGridView.SelectedCells.Count == (lines.Length-1)*(cells.Length)) 
     { 
      dataGridView.SelectedCells[i].Value = cell; 
      i++; 
     } 
    } 
} 

的問題是,如果我複製這樣的事情(在Excel中):

1 2 3 
4 5 6 

我的datagridview會看起來像:

6 4 2 
5 3 1 

我真的不知道該怎麼辦才能解決這個問題... 在此先感謝

+0

你可以使用單元格數組創建一個數據表並將數據綁定到數據網格嗎? – ray 2012-04-11 10:05:05

+0

@RayMoonDay我不知道如果這是一個很好的解決方案,考慮到我有50個動態生成的網格,我沒有真正進入內存使用,所以我不知道它是否是巨大的。無論如何,我會試試這個,謝謝。 – Blowi 2012-04-11 10:09:39

+0

爲什麼你可能需要動態生成50個空網格?但是,如果您只需打印作爲剪貼板副本的變量's',您可能會想到t是否與您的輸出匹配或真正的excel數據順序 – ray 2012-04-11 10:14:29

回答

1

替換

dataGridView.SelectedCells[i].Value = cell;

dataGridView.SelectedCells[(dataGridView.SelectedCells.Count-1) - i].Value = cell;

+0

這是一個非常簡單的修復方法,因爲如果我從右下角選擇無論如何,用戶將不得不小心,謝謝:) – Blowi 2012-04-12 06:25:07

2
  1. 轉換剪貼板數據,以2維陣列。記住每個維度的長度。
  2. 遍歷所選單元格並找到左上角和右下角的單元格。從中你可以確定它的大小合適。
  3. 使用雙循環,將剪貼板數據從陣列位置直接映射到單元格座標(不使用選定單元格),並使用單元格座標作爲偏移量。

或者,您可以創建一個包含屬性Row,Col和Value的小型類/結構體的列表,而不是二維數組。然後只是遍歷它而不是雙循環。

+0

我想到了這一點,實際上嘗試過(但其他方式,通過排序列表中選定的單元格和循環),也謝謝你:) – Blowi 2012-04-12 06:26:45