1

我想知道是否有人可以帮助我。我已经编写了一些代码,这些代码将从剪贴板复制到 DatagridView 中。我遇到的问题是,除了第一个单元格之外,一切都按预期工作。

例如,如果我从 Excel 2 列中仅复制一行,则第一列中的值为 20,第二列中的值为 30

然后,当我将它粘贴到 DataGridView 中时,我得到以下信息。

在第一列中,我得到数字 20,然后是一个大空格和 30 的值,但在第二列中只显示了 30 的值。

以下是我的代码 ID,任何人都知道如何修复第一个单元格,请帮助我

 if (e.Control && e.KeyCode == Keys.V)
        {
            char[] rowSplitter = { '\r', '\n' };
            char[] columnSplitter = { '\t' };
            //get the text from clipboard
            IDataObject dataInClipboard = Clipboard.GetDataObject();
            string stringInClipboard = (string)dataInClipboard.GetData(DataFormats.Text);
            //split it into lines
            string[] rowsInClipboard = stringInClipboard.Split(rowSplitter, StringSplitOptions.RemoveEmptyEntries);
            //get the row and column of selected cell in grid
            int r = DGV.SelectedCells[0].RowIndex;
            int c = DGV.SelectedCells[0].ColumnIndex;
            //add rows into grid to fit clipboard lines
            if (DGV.Rows.Count < (r + rowsInClipboard.Length))
            {
                MessageBox.Show("PasteValues Will be Outside of Grid");
                return;
            }
            // loop through the lines, split them into cells and place the values in the corresponding cell.
            for (int iRow = 0; iRow < rowsInClipboard.Length; iRow++)
            {
                //split row into cell values
                string[] valuesInRow = rowsInClipboard[iRow].Split(columnSplitter);
                //cycle through cell values
                for (int iCol = 0; iCol < valuesInRow.Length; iCol++)
                {
                    //assign cell value, only if it within columns of the grid
                    if (DGV.ColumnCount - 1 >= c + iCol)
                    {
                        DGV.Rows[r + iRow].Cells[c + iCol].Value = valuesInRow[iCol];
                        for (int i = 0;
                        i < selectedCellCount; i++)
                        {
                            DGV.SelectedCells[i].Value = valuesInRow[iCol]; ;
                        }
                    }
                }
            }

        }
4

0 回答 0