Member 14324315 Ответов: 2

После копирования данных из excel и вставки их в datagridview вставляется только пустое значение. Помоги мне.


private string ClipboardData
       {
           get
           {
               IDataObject iData = Clipboard.GetDataObject();
               if (iData == null) return '';

               if (iData.GetDataPresent(DataFormats.Text))
                   return (string)iData.GetData(DataFormats.Text);
               return '';
           }
           set { Clipboard.SetDataObject(value); }
       }

       private void CopyRowAdd(string data, int idx)
       {
           try
           {
               DataTable tblData = (DataTable)grdXYMappingInfo.DataSource;
               DataRow newRow = tblData.NewRow();

               string[] rawRowData = data.Split(new char[] { '\r', '\x09' });
               string[] RowData = new string[tblData.Columns.Count];

               for (int i = 0; i <  RowData.Length; i++)
               {
                   if (i >= tblData.Columns.Count) break;
                   else
                   {
                       newRow[i] = RowData[i];
                   }
               }
               tblData.Rows.InsertAt(newRow, grvXYMappingInfo.FocusedRowHandle + idx);
           }
           catch (Exception x)
           {
               System.Console.WriteLine(x.Message);
           }
       }

       private void grvXYMappingInfo_KeyDown(object sender, KeyEventArgs e)
       {

           if (e.Control && e.KeyCode == Keys.C)
           {

               grvXYMappingInfo.CopyToClipboard();

           }
           else if (e.Control && e.KeyCode == Keys.V)
           {
               try
               {

                   string[] selectedRow = ClipboardData.Split('\n');
                   string[] addRow = new string[selectedRow.Length - 1];
                   System.Array.Copy(selectedRow, 1, addRow, 0, selectedRow.Length - 1);

                   if (addRow.Length <  1) return;
                   int rowidx = 1;
                   foreach (string row in addRow)
                   {
                       CopyRowAdd(row, rowidx);
                       rowidx++;
                   }
               }
               catch (Exception x)
               {
                   System.Console.WriteLine(x.Message);
               }

           }
       }


Что я уже пробовал:

After copying the data from Excel and pasting it into the datagridview, only the empty value is pasted. Help me.

2 Ответов

Рейтинг:
1

Gerry Schmitz

что это за "данные"? Одна клетка? Больше одного? Какой формат? Как он попал в буфер обмена? Почему бы вам не сделать это в коде (а не в буфере обмена), как все остальные? Вы создали (дополнительного) "посредника" ни за что.


Рейтинг:
0

OriginalGriff

Этот код даже не компилируется, не говоря уже о вставке пустых данных.

private string ClipboardData
       {
           get
           {
               IDataObject iData = Clipboard.GetDataObject();
               if (iData == null) return '';

               if (iData.GetDataPresent(DataFormats.Text))
                   return (string)iData.GetData(DataFormats.Text);
               return '';
           }
           set { Clipboard.SetDataObject(value); }
       }
Даст вам ошибку на обоих ваших return '' операторы, потому что у вас не может быть "пустого символьного литерала": "
Даже если вы исправите это, вы не сможете вернуть a char значение из строкового свойства - это также выдаст вам ошибку, возможно, сообщение о преобразовании типа.
Почти наверняка, вы должны возвращать пустую строку "" вместо этого, хотя a null возможно, это лучший выбор.

Таким образом, код, который вы тестируете, - это не тот код, который вы показываете, а это означает, что тесты, которые вы делаете, относятся к последней версии вашего кода, которая была скомпилирована, и, вероятно, именно поэтому он работает не так, как вы думаете.

Исправьте это и попробуйте еще раз - и используйте отладчик, чтобы точно узнать, что происходит!