datagridview中的粘贴

来源:互联网 发布:盐类水解三大守恒知乎 编辑:程序博客网 时间:2024/05/19 16:35
private void pasteToolStripMenuItem_Click(object sender, EventArgs e) //粘贴
{
    if (this.dataGridView1.CurrentCell == null) return;
    string paste = Clipboard.GetText();
    paste = paste.ToString().Trim();
    if (string.IsNullOrEmpty(paste)) return;
    char[] rowSplitter = { '\r', '\n' };
    char[] columnSplitter = { '\t' };
    IDataObject dataInClipboard = Clipboard.GetDataObject();
    string stringInClipboard = (string)dataInClipboard.GetData(DataFormats.Text);
    string[] rowsInClipboard = stringInClipboard.Split(rowSplitter, StringSplitOptions.RemoveEmptyEntries);
    stringInClipboard = stringInClipboard.Replace("?", ""); //刪除转行的行未空格
    int r = dataGridView1.SelectedCells[0].RowIndex; //获得单元格位置
    int cc = dataGridView1.SelectedCells[0].ColumnIndex;
    if (dataGridView1.Rows.Count < (r + rowsInClipboard.Length))
    {
        dataGridView1.Columns.Clear(); //避免被抗干扰,可以不写
        dataGridView1.DataSource = null; //如果有绑定数据源,此处要取消;如果没有绑定,可以不用此语句
        dataGridView1.Columns.Add("最短时间(H)", "腊模静置最短时间(H)");//从此栏算起的4栏大多数情况下不用写,它是根据上一行的 dataGridView1.DataSource = null 而增加的
        dataGridView1.Columns["腊模静置最短时间(H)"].ValueType = typeof(double);
        dataGridView1.Columns.Add("建档日期", "建档日期");
        dataGridView1.Columns["建檔日期"].ValueType = typeof(DateTime);
        dataGridView1.Rows.Add(r + rowsInClipboard.Length - dataGridView1.Rows.Count);
    }
    for (int iRow = 0; iRow < rowsInClipboard.Length; iRow++)
    {
        string[] valuesInRow = rowsInClipboard[iRow].Split(columnSplitter);
        for (int iCol = 0; iCol < valuesInRow.Length; iCol++)
        {
            if ((r + iRow) > (dataGridView1.Rows.Count - 1)) //如果拷贝数据超过现有单元格长度,要中止运行,否则会报错
            { break; }
            else if (dataGridView1.ColumnCount - 1 >= cc + iCol)
            {
                //DataGridViewCell cell = dataGridView1.Rows[r + iRow].Cells[cc + iCol];
                //if (!cell.ReadOnly)
                //{
                //    cell.Value = valuesInRow[iCol];
                //}
                
                dataGridView1.Rows[r + iRow].Cells[cc + iCol].Value = valuesInRow[iCol]; //被注释的语句,与此处作用相同
            }
        }
    }
    if (dt1_copy.Rows.Count > 0) //必须要有数据
    {
        for (int i = dt1_copy.Rows.Count; i < dataGridView1.Rows.Count; i++) //dt1_copy 获取未新增行时的数据(未点击"新增"前), 以下代码与 dataGridView1.DataSource = null 有关,没有dataGridView1.DataSource = null 可以不用写以下代码
        {
            DataRow dr = dt1_copy.NewRow();
            for (int j = 0; j < dataGridView1.Columns.Count; j++)
            {
                dr[dataGridView1.Columns[j].Name] = dataGridView1.Rows[i].Cells[j].Value;
            }
            dt1_copy.Rows.Add(dr);
        }
        dataGridView1.Columns.Clear();
        dataGridView1.DataSource = dt1_copy; //重新绑定数据源
    }
}
原创粉丝点击