在C#中粘贴Excel单元格时动态更改DataGridView

时间:2018-04-20 06:21:07

标签: c# excel winforms datagridview

我正在尝试在C#中的Windows窗体DataGridView中添加粘贴功能。我已经有一些工作正常的代码,但只要DataGridView有足够的列和行。

假设我已经复制了一个包含五行的Excel列,并且我希望将其粘贴到DataGridView中有四行的列中,最后一行被截断。我的目标是添加这一行,以便粘贴的值也可以添加。

这是我的代码:

string s = Clipboard.GetText();
            string[] lines = s.Split('\n');
            int row = dataGridView1.CurrentCell.RowIndex;
            int col = dataGridView1.CurrentCell.ColumnIndex;
            foreach (string line in lines)
            {
                if (row < dataGridView1.RowCount && line.Length >0)
                {
                    string[] cells = line.Split('\t');
                    for (int i = 0; i < cells.GetLength(0); ++i)
                    {
                        if (col + i < this.dataGridView1.ColumnCount)
                        {
                            dataGridView1[col + i, row].Value = Convert.ChangeType(cells[i], dataGridView1[col + i, row].ValueType);
                        }
                        else
                        {
                            break;
                        }
                    }
                    row++;
                }
                else
                {
                    break;
                }
            }

1 个答案:

答案 0 :(得分:0)

此代码现在解决了我的问题:

 string s = Clipboard.GetText();
        string[] lines = s.Split('\n');
        int row = dataGridView1.CurrentCell.RowIndex;
        int col = dataGridView1.CurrentCell.ColumnIndex;
        while (lines.Length != (dataGridView1.RowCount -row))
        {
            dt.Rows.Add();
        }
        foreach (string line in lines)
        {
            if (row < dataGridView1.RowCount && line.Length >0)
            {

                string[] cells = line.Split('\t');
                while(cells.Length != (dataGridView1.ColumnCount - col))
                {
                    dt.Columns.Add();
                }
                for (int i = 0; i < cells.GetLength(0); ++i)
                {
                    if (col + i < this.dataGridView1.ColumnCount)
                    {
                        dataGridView1[col + i, row].Value = Convert.ChangeType(cells[i], dataGridView1[col + i, row].ValueType);
                    }
                    else
                    {
                        break;
                    }
                }
                row++;
            }
            else
            {
                break;
            }
        }