Как скопировать и вставить значения ячеек datagridview в C#
Я разрабатываю настольное приложение на языке c#. Копия, кажется, работает хорошо, но при вставке значений буфера обмена она выдает ошибку строка должна быть ровно один символ длиной в строке:
string [] lines = clipboardvalues.Сплит(char.Синтаксический анализ(среда. новая строка));
Как я могу исправить это, чтобы вставить ячейки в datagridview.
Что я уже пробовал:
private DataGridViewCell GetStartingCell(DataGridView dgView) { if (dgView.SelectedCells.Count == 0) { return null; } int rowIndex = dgView.Rows.Count - 1; int ColIndex = dgView.Columns.Count - 1; foreach (DataGridViewCell dgvcell in dgView.SelectedCells) { if (dgvcell.RowIndex < rowIndex) { rowIndex = dgvcell.RowIndex; } if (dgvcell.ColumnIndex < ColIndex) { ColIndex = dgvcell.ColumnIndex; } } return dgView[ColIndex, rowIndex]; } private Dictionary<int, Dictionary<int, string>> ClipboardValues(string clipboardvalue) { Dictionary<int, Dictionary<int, string>> copyValues = new Dictionary<int, Dictionary<int, string>>(); string[] lines = clipboardvalue.Split(char.Parse(Environment.NewLine)); for (int i = 0; i < lines.Length; i++) { copyValues[i] = new Dictionary<int, string>(); string[] linecontent = lines[i].Split((char)Keys.Tab); if (linecontent.Length == 0) { copyValues[i][0] = string.Empty; } else { for (int j = 0; j < linecontent.Length; j++) { copyValues[i][j] = linecontent[j]; } } } return copyValues; } public void PasteClipboardValue () { if (STMDataGridView.Focus()) { if (STMDataGridView.SelectedCells.Count == 0) { MessageBox.Show("Please, select a cell", "Paste", MessageBoxButtons.OK, MessageBoxIcon.Warning); return; } DataGridViewCell StartingCell = GetStartingCell(STMDataGridView); Dictionary<int, Dictionary<int, string>> cbvalue = ClipboardValues(Clipboard.GetText()); int irowindex = StartingCell.RowIndex; foreach (int rowkey in cbvalue.Keys) { int icolindex = StartingCell.ColumnIndex; foreach (int cellkey in cbvalue[rowkey].Keys) { if (icolindex <= STMDataGridView.Columns.Count - 1 && irowindex <= STMDataGridView.Rows.Count - 1) { DataGridViewCell cell = STMDataGridView[icolindex, irowindex]; cell.Value = cbvalue[rowkey][cellkey].TrimStart(); } icolindex += 1; } irowindex += 1; } } }
Richard MacCutchan
Я предполагаю, что сообщение об ошибке говорит вам, что ваша исходная строка пуста. Ваш отладчик подтвердит это.
Robert S4r
Но когда я вставляю в любой текстовый редактор, скажем MS office word, он вставляет данные, то есть копирует их в буфер обмена.
Richard MacCutchan
Ну, это не имеет никакого отношения к вашей проблеме. Используйте свой отладчик, чтобы узнать, что происходит.