WinForm中DataGridView滑鼠選中單元格內容複製方案 ...
WinForm中DataGridView滑鼠選中單元格內容複製方案
1、CTR+C快捷鍵複製
前提:該控制項ClipboardCopyMode屬性設置值非Disable;
2.滑鼠框選,自定義代碼實現複製
dataGridView1.SelectedCells可以獲取單所有選中單元格。但是遍歷單元格時,發現單元格順序與界面顯示順序可能不一致。
Datagridview中selectionMode屬性與順序有關
通過代碼輸出各單元格行列索引來確定格子。代碼如下:
1 private void copyToolStripMenuItem_Click(object sender, EventArgs e) 2 { 3 var currcell = dataGridView1.CurrentCellAddress; 4 Console.WriteLine($"當前單元格{currcell.Y}--{currcell.X}"); 5 var cells = dataGridView1.SelectedCells; 6 Console.WriteLine($"選中單元格數{cells.Count}"); 7 for (int i = 0; i < cells.Count; i++) 8 { 9 Console.WriteLine($"第{i+1}個格子:行:{cells[i].RowIndex}列:{cells[i].ColumnIndex}"); 10 } 11 }
2.1selectionMode=FullRowSelect
case1:
框選單元格集合元素順序
當前單元格4--2
選中單元格數33
第1個格子:行:4列:0
第2個格子:行:4列:1
第3個格子:行:4列:2
第4個格子:行:4列:3
第5個格子:行:4列:4
第6個格子:行:4列:5
第7個格子:行:4列:6
第8個格子:行:4列:7
第9個格子:行:4列:8
第10個格子:行:4列:9
第11個格子:行:4列:10
第12個格子:行:3列:0
第13個格子:行:3列:1
第14個格子:行:3列:2
第15個格子:行:3列:3
第16個格子:行:3列:4
第17個格子:行:3列:5
第18個格子:行:3列:6
第19個格子:行:3列:7
第20個格子:行:3列:8
第21個格子:行:3列:9
第22個格子:行:3列:10
第23個格子:行:2列:0
第24個格子:行:2列:1
第25個格子:行:2列:2
第26個格子:行:2列:3
第27個格子:行:2列:4
第28個格子:行:2列:5
第29個格子:行:2列:6
第30個格子:行:2列:7
第31個格子:行:2列:8
第32個格子:行:2列:9
第33個格子:行:2列:10
case2:
框選單元格集合元素順序
當前單元格9--5
選中單元格數33
第1個格子:行:9列:0
第2個格子:行:9列:1
第3個格子:行:9列:2
第4個格子:行:9列:3
第5個格子:行:9列:4
第6個格子:行:9列:5
第7個格子:行:9列:6
第8個格子:行:9列:7
第9個格子:行:9列:8
第10個格子:行:9列:9
第11個格子:行:9列:10
第12個格子:行:10列:0
第13個格子:行:10列:1
第14個格子:行:10列:2
第15個格子:行:10列:3
第16個格子:行:10列:4
第17個格子:行:10列:5
第18個格子:行:10列:6
第19個格子:行:10列:7
第20個格子:行:10列:8
第21個格子:行:10列:9
第22個格子:行:10列:10
第23個格子:行:11列:0
第24個格子:行:11列:1
第25個格子:行:11列:2
第26個格子:行:11列:3
第27個格子:行:11列:4
第28個格子:行:11列:5
第29個格子:行:11列:6
第30個格子:行:11列:7
第31個格子:行:11列:8
第32個格子:行:11列:9
第33個格子:行:11列:10
2.2selectionMode=CellSelect
case1:
框選單元格集合元素順序
當前單元格3--4
選中單元格數9
第1個格子:行:3列:4
第2個格子:行:2列:4
第3個格子:行:1列:4
第4個格子:行:3列:3
第5個格子:行:3列:2
第6個格子:行:2列:3
第7個格子:行:1列:3
第8個格子:行:2列:2
第9個格子:行:1列:2
case2:
框選單元格集合元素順序
當前單元格5--2
選中單元格數6
第1個格子:行:5列:2
第2個格子:行:4列:2
第3個格子:行:3列:2
第4個格子:行:2列:2
第5個格子:行:1列:2
第6個格子:行:0列:2
case3:
框選單元格集合元素順序
當前單元格6--4
選中單元格數10
第1個格子:行:6列:5
第2個格子:行:6列:4
第3個格子:行:7列:5
第4個格子:行:7列:4
第5個格子:行:10列:4
第6個格子:行:9列:4
第7個格子:行:8列:4
第8個格子:行:8列:5
第9個格子:行:9列:5
第10個格子:行:10列:5
case4:
框選單元格集合元素順序
當前單元格7--5
選中單元格數6
第1個格子:行:7列:5
第2個格子:行:8列:5
第3個格子:行:9列:5
第4個格子:行:10列:5
第5個格子:行:11列:5
第6個格子:行:12列:5
case5:Ctr鍵+滑鼠點選
框選單元格集合元素順序
當前單元格0--4
選中單元格數7
第1個格子:行:0列:4
第2個格子:行:15列:5
第3個格子:行:12列:2
第4個格子:行:2列:8
第5個格子:行:8列:5
第6個格子:行:5列:3
第7個格子:行:3列:2
case7:Shift+滑鼠點選
框選單元格集合元素順序
當前單元格8--2
選中單元格數8
第1個格子:行:8列:2
第2個格子:行:7列:2
第3個格子:行:6列:2
第4個格子:行:5列:2
第5個格子:行:4列:2
第6個格子:行:3列:2
第7個格子:行:2列:2
第8個格子:行:1列:2
case7:Shift+滑鼠點選
框選單元格集合元素順序
當前單元格7--4
選中單元格數12
第1個格子:行:7列:4
第2個格子:行:6列:4
第3個格子:行:5列:4
第4個格子:行:7列:3
第5個格子:行:6列:3
第6個格子:行:5列:3
第7個格子:行:7列:2
第8個格子:行:6列:2
第9個格子:行:5列:2
第10個格子:行:4列:4
第11個格子:行:4列:3
第12個?褡櫻盒?4列:2
總結
選中單元格在集合中添加順序並無明顯的規律,博客中有人建議通過選中單元格集合第一個與最後一個元素的行列來確定選中的區域內元素,可見通過上面的實驗,這種做法顯然是錯誤的。
解決思路:
1、可以遍歷單元格集合對其中元素位置按照先行後列的順序重新排位,再遍歷單元格獲取單元格值進行拼接到剪切板。但此法再數據量大時效率應該比較低。