DataGridViewの複数セルのコピペ処理です。
複数セルを選択後コピーし、ペーストするときに選択セルの状態を維持したまま、別のセルにペーストしたいです。(Excelでおこなうのと同じようにしたい。)
ペーストするときにPasteメソッドにて、まずコピーしたデータを配列型で取得します。
そのデータを「gridView.SelectedCells」の順番に入れたいのですが、よくわかりません。
(gridView.SelectedCellsは読み取り専用のため、ソートできない。)
なにかいい方法はないでしょうか?(複雑なセル位置の計算が必要でしょうか?)
また、まったく別の方法でコピーペースト処理の実装をしたほうがいいでしょうか?
C#
1 /// <summary> 2 /// コピー 3 /// </summary> 4 public void Copy(object sender) 5 { 6 DataGridView gridView = sender as DataGridView; 7 if (gridView != null) 8 { 9 StringBuilder sb = new StringBuilder(); 10 11 //順に文字列結合して取得 12 //(GetDataする際にひとつのデータのほうが扱える) 13 foreach (DataGridViewCell cell in gridView.SelectedCells) 14 { 15 sb.Append(cell.Value.ToString()); 16 } 17 Clipboard.SetDataObject(sb.ToString()); 18 } 19 } 20 21 /// <summary> 22 /// ペースト 23 /// </summary> 24 public void Paste(object sender) 25 { 26 DataGridView gridView = sender as DataGridView; 27 if (gridView != null) 28 { 29 //ペーストする値を取得(タブと改行の影響で順番どおり取得できる) 30 IDataObject idata = Clipboard.GetDataObject(); 31 string pasteVal = (string)idata.GetData(DataFormats.Text); 32 string[] pasteStr = pasteVal.Split(new string[] { "\t", "\r\n" }, StringSplitOptions.None); 33 34 //順に貼り付ける 35 int cnt = 0; 36 foreach (DataGridViewCell cell in gridView.SelectedCells) 37 { 38 if (cnt >= pasteStr.Length) break; //選択セルのほうが多いならbreak 39 cell.Value = pasteStr[cnt]; 40 cnt++; 41 } 42 } 43 }
環境:WindowsFormApplication .NET FrameWork
エディタ:Visual Studio 2017

回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/04/17 06:28