WinForm中DataGridView複製選中單元格內容解決方案

WinForm中DataGridView鼠標選中單元格內容複製方案spa

一、CTR+C快捷鍵複製code

前提:該控件ClipboardCopyMode屬性設置值非Disable;orm

 

 

 

2.鼠標框選,自定義代碼實現複製blog

dataGridView1.SelectedCells能夠獲取單全部選中單元格。可是遍歷單元格時,發現單元格順序與界面顯示順序可能不一致。索引

Datagridview中selectionMode屬性與順序有關ip

 

 

 經過代碼輸出各單元格行列索引來肯定格子。代碼以下:博客

 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=FullRowSelectit

case1:io

框選單元格集合元素順序class

當前單元格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

 總結

選中單元格在集合中添加順序並沒有明顯的規律,博客中有人建議經過選中單元格集合第一個與最後一個元素的行列來肯定選中的區域內元素,可見經過上面的實驗,這種作法顯然是錯誤的。

解決思路:

一、能夠遍歷單元格集合對其中元素位置按照先行後列的順序從新排位,再遍歷單元格獲取單元格值進行拼接到剪切板。但此法再數據量大時效率應該比較低。

相關文章
相關標籤/搜索