zoukankan      html  css  js  c++  java
  • datagridview实现复制粘贴

      private void StepArtDgv_KeyUp(object sender, KeyEventArgs e)
            {
                //粘贴
                if (e.KeyCode == Keys.V && e.Control)
                {
                    // 获取剪切板的内容,并按行分割
                    string pasteText = Clipboard.GetText().Replace(" ", "@").TrimEnd('@');

                    //选中区域是区块后,
                    int xzRowCount_Z = StepArtDgv.SelectedCells[StepArtDgv.SelectedCells.Count - 1].RowIndex;//选中左上角的单元格的行索引
                    int xzColCount_Z = StepArtDgv.SelectedCells[StepArtDgv.SelectedCells.Count - 1].ColumnIndex;//选中左上角的单元格的列索引
                    int xzRowCount_Y = StepArtDgv.CurrentCell.RowIndex;//选中右下角的单元格的列索引
                    int xzColCount_Y = StepArtDgv.CurrentCell.ColumnIndex;//选中右下角的单元格的行索引

                    int Colcounts = xzColCount_Y + 1 - StepArtDgv.SelectedCells[StepArtDgv.SelectedCells.Count - 1].ColumnIndex;//粘贴区域的列数
                    int Rowcounts = xzRowCount_Y + 1 - StepArtDgv.SelectedCells[StepArtDgv.SelectedCells.Count - 1].RowIndex;//粘贴区域的行数

                    int MaxRowIndex = StepArtDgv.Rows.Count - 1; //获取做大的行数,最下面的行索引
                    int MaxColIndex = StepArtDgv.ColumnCount - 1; //获取做大的列数,最右面的行索引

                    //临时变量,索引随时都有可能在曾东增加,然而增加后无法还原,所以采用临时变量存储
                    int tempRowIndexs = xzRowCount_Z;
                    int tempColumnIndexs = xzColCount_Z;

                    if (xzColCount_Z == 0)
                    {
                        MessageBox.Show("项目名称不能粘贴!");
                        return;
                    }

                    string[] Row = null;
                    Row = pasteText.Split('@');//分割的行数数组

                    string[] col = null;//分割行后的列,每行的内容
                    col = Row[0].Replace(" ", "#").TrimEnd('#').Split('#');//专门存储列数

                    //判断是否存在非数字类型
                    for (int t = 0; t < Row.Length; t++)
                    {
                        col = Row[t].Replace(" ", "#").TrimEnd('#').Split('#');
                        //for (int t1 = 0; t1 < col.Length; t1++)
                        //{
                            ////判断字符串
                            //if (!reg.IsMatch(col[t1].ToString().Trim()))
                            //{
                            //    MessageBox.Show("粘贴的内容存在非数字类型!");
                            //    return;
                            //}
                        //}

                    }
                    if (Row.Length > 0)
                    {
                        //粘贴区块,列行都是选中的倍数
                        if (Rowcounts % Row.Length == 0 && Colcounts % col.Length == 0)
                        {
                            for (int cs = 0; cs < Colcounts / col.Length; cs++)
                            {
                                for (int rs = 0; rs < Rowcounts / Row.Length; rs++)
                                {
                                    for (int r = 0; r < Row.Length; r++)
                                    {
                                        if (xzRowCount_Z > MaxRowIndex) break;//跳出行
                                        //获取每行中的内容
                                        string rowMessage = Row[r].Replace(" ", "#").TrimEnd('#');
                                        col = rowMessage.Split('#');
                                        for (int c = 0; c < col.Length; c++)
                                        {
                                            if (xzColCount_Z > MaxColIndex) break;//粘贴内容出了DGV的区域,跳出该循环,进行下一行

                                            StepArtDgv.Rows[xzRowCount_Z].Cells[xzColCount_Z].Value = col[c];
                                            xzColCount_Z++;
                                        }
                                        xzRowCount_Z++;
                                        xzColCount_Z = tempColumnIndexs;//因为列自增了,需要还原,进行下一行填充
                                    }
                                }
                                xzRowCount_Z = tempRowIndexs;//行数从头开始
                                xzColCount_Z += col.Length;//列增加
                                tempColumnIndexs += col.Length;//列的临时变量也要跟着变
                            }
                        }//粘贴区块,行是选中的行的倍数
                        else if (Rowcounts % Row.Length == 0)
                        {
                            for (int rs = 0; rs < Rowcounts / Row.Length; rs++)
                            {
                                for (int r = 0; r < Row.Length; r++)
                                {
                                    if (xzRowCount_Z > MaxRowIndex) break;//跳出行
                                    //获取每行中的内容
                                    string rowMessage = Row[r].Replace(" ", "#").TrimEnd('#');
                                    col = rowMessage.Split('#');
                                    for (int c = 0; c < col.Length; c++)
                                    {
                                        if (xzColCount_Z > MaxColIndex) break;//粘贴内容出了DGV的区域,跳出该循环,进行下一行

                                        StepArtDgv.Rows[xzRowCount_Z].Cells[xzColCount_Z].Value = col[c];
                                        xzColCount_Z++;
                                    }
                                    xzRowCount_Z++;
                                    xzColCount_Z = tempColumnIndexs;//因为列自增了,需要还原,进行下一行填充
                                }
                                xzColCount_Z = tempColumnIndexs;//因为列自增了,需要还原,进行下一行填充
                            }
                        }//粘贴区块,列是选中的列的倍数
                        else if (Colcounts % col.Length == 0)
                        {
                            for (int cs = 0; cs < Colcounts / col.Length; cs++)
                            {
                                for (int r = 0; r < Row.Length; r++)
                                {
                                    if (xzRowCount_Z > MaxRowIndex) break;//跳出行
                                    //获取每行中的内容
                                    string rowMessage = Row[r].Replace(" ", "#").TrimEnd('#');
                                    col = rowMessage.Split('#');
                                    for (int c = 0; c < col.Length; c++)
                                    {
                                        if (xzColCount_Z > MaxColIndex) break;//粘贴内容出了DGV的区域,跳出该循环,进行下一行

                                        StepArtDgv.Rows[xzRowCount_Z].Cells[xzColCount_Z].Value = col[c];
                                        xzColCount_Z++;
                                    }
                                    xzColCount_Z = tempColumnIndexs;
                                    xzRowCount_Z++;//行数从头开始
                                }
                                xzRowCount_Z = tempRowIndexs;//行数从头开始
                                xzColCount_Z += col.Length;//列增加
                                tempColumnIndexs += col.Length;//列的临时变量也要跟着变
                            }
                        } //粘贴区块小于选中区块(粘贴区块只是一个单元格 || 行和列小于粘贴区块 || 不是行或者列的倍数)
                        else if (Rowcounts <= Row.Length && Colcounts <= col.Length || Rowcounts % Row.Length != 0 || Colcounts % col.Length != 0)
                        {
                            for (int r = 0; r < Row.Length; r++)//循环行
                            {
                                if (xzRowCount_Z > MaxRowIndex) break;//跳出行
                                //获取每行中的内容
                                string rowMessage = Row[r].Replace(" ", "#").TrimEnd('#');
                                col = rowMessage.Split('#');

                                //为每个单元格赋值
                                for (int c = 0; c < col.Length; c++)
                                {
                                    if (xzColCount_Z > MaxColIndex) break;//粘贴内容出了DGV的区域,跳出该循环,进行下一行

                                    StepArtDgv.Rows[xzRowCount_Z].Cells[xzColCount_Z].Value = col[c];
                                    xzColCount_Z++;
                                }
                                xzRowCount_Z++;//下一行
                                xzColCount_Z = tempColumnIndexs;//因为列自增了,需要还原,进行下一行填充
                            }
                        }
                    }
                }
            }

     =======================================================

    行复制,并且要求只能修改固定列=

     private void StepArtDgv_KeyUp(object sender, KeyEventArgs e)
            {
                int finally_Index = 4;
                if (e.KeyCode == Keys.V && e.Control)
                {
                    string pasteText = Clipboard.GetText().Replace(" ", "@").TrimEnd('@');

                    int xzRowCount_Z = StepArtDgv.SelectedCells[StepArtDgv.SelectedCells.Count - 1].RowIndex;
                    int xzColCount_Z = StepArtDgv.SelectedCells[StepArtDgv.SelectedCells.Count - 1].ColumnIndex;
                    int xzRowCount_Y = StepArtDgv.CurrentCell.RowIndex;
                    int xzColCount_Y = StepArtDgv.CurrentCell.ColumnIndex;

                    int Colcounts = xzColCount_Y + 1 - StepArtDgv.SelectedCells[StepArtDgv.SelectedCells.Count - 1].ColumnIndex;
                    int Rowcounts = xzRowCount_Y + 1 - StepArtDgv.SelectedCells[StepArtDgv.SelectedCells.Count - 1].RowIndex;

                    int MaxRowIndex = StepArtDgv.Rows.Count - 1;
                    int MaxColIndex = StepArtDgv.ColumnCount - 1;

                    int tempRowIndexs = xzRowCount_Z;
                    int tempColumnIndexs = xzColCount_Z;

                    if (xzColCount_Z ==0)
                    {
                        MessageBox.Show("项目名称不能粘贴!");
                        return;
                    }
                    string[] Row = null;
                    Row = pasteText.Split('@');

                    string[] col = null;
                    col = Row[0].Replace(" ", "#").TrimEnd('#').Split('#');

                    for (int t = 0; t < Row.Length; t++)
                    {
                        col = Row[t].Replace(" ", "#").TrimEnd('#').Split('#');
                    }
                    if (Row.Length > 0)
                    {
                        if (Rowcounts % Row.Length == 0 && Colcounts % col.Length == 0)
                        {
                            for (int cs = 0; cs < Colcounts / col.Length; cs++)
                            {
                                for (int rs = 0; rs < Rowcounts / Row.Length; rs++)
                                {
                                    for (int r = 0; r < Row.Length; r++)
                                    {
                                        if (xzRowCount_Z > MaxRowIndex) break;
                                        string rowMessage = Row[r].Replace(" ", "#").TrimEnd('#');
                                        col = rowMessage.Split('#');
                                        for (int c = 0; c < col.Length; c++)
                                        {
                                            if (xzColCount_Z > MaxColIndex) break;

                                            StepArtDgv.Rows[xzRowCount_Z].Cells[xzColCount_Z].Value = col[c];
                                            xzColCount_Z++;
                                        }
                                        xzRowCount_Z++;
                                        xzColCount_Z = tempColumnIndexs;
                                    }
                                }
                                xzRowCount_Z = tempRowIndexs;
                                xzColCount_Z += col.Length;
                                tempColumnIndexs += col.Length;
                            }
                        }
                        else if (Rowcounts % Row.Length == 0)
                        {
                            for (int rs = 0; rs < Rowcounts / Row.Length; rs++)
                            {
                                for (int r = 0; r < Row.Length; r++)
                                {
                                    if (xzRowCount_Z > MaxRowIndex) break;
                                    xzColCount_Z = finally_Index-1;
                                    string rowMessage = Row[r].Replace(" ", "#").TrimEnd('#');
                                    col = rowMessage.Split('#');
                                    for (int c = finally_Index; c < col.Length; c++)
                                    {
                                        if (xzColCount_Z > MaxColIndex) break;

                                        StepArtDgv.Rows[xzRowCount_Z].Cells[xzColCount_Z].Value = col[c].ToString();
                                        xzColCount_Z++;
                                    }
                                    xzRowCount_Z++;
                                    xzColCount_Z = tempColumnIndexs;
                                }
                                xzColCount_Z = tempColumnIndexs;
                            }
                        }
                        else if (Colcounts % col.Length == 0)
                        {
                            for (int cs = 0; cs < Colcounts / col.Length; cs++)
                            {
                                for (int r = 0; r < Row.Length; r++)
                                {
                                    if (xzRowCount_Z > MaxRowIndex) break;
                                    string rowMessage = Row[r].Replace(" ", "#").TrimEnd('#');
                                    col = rowMessage.Split('#');
                                    for (int c = 0; c < col.Length; c++)
                                    {
                                        if (xzColCount_Z > MaxColIndex) break;
                                        StepArtDgv.Rows[xzRowCount_Z].Cells[xzColCount_Z].Value = col[c].ToString();
                                        xzColCount_Z++;
                                    }
                                    xzColCount_Z = tempColumnIndexs;
                                    xzRowCount_Z++;
                                }
                                xzRowCount_Z = tempRowIndexs;
                                xzColCount_Z += col.Length;
                                tempColumnIndexs += col.Length;
                            }
                        }
                        else if (Rowcounts <= Row.Length && Colcounts <= col.Length || Rowcounts % Row.Length != 0 || Colcounts % col.Length != 0)
                        {
                            for (int r = 0; r < Row.Length; r++)
                            {
                                if (xzRowCount_Z > MaxRowIndex) break;
                                string rowMessage = Row[r].Replace(" ", "#").TrimEnd('#');
                                col = rowMessage.Split('#');
                                xzColCount_Z = finally_Index-2;
                                for (int c = finally_Index; c < col.Length; c++)
                                {
                                    if (xzColCount_Z > MaxColIndex) break;
                                    StepArtDgv.Rows[xzRowCount_Z].Cells[xzColCount_Z].Value = col[c].ToString();
                                    xzColCount_Z++;
                                }
                                xzRowCount_Z++;
                                xzColCount_Z = tempColumnIndexs;
                            }
                        }
                    }
                    string sortValue = StepArtDgv.CurrentRow.Cells["Sort"].Value == null ? "" : StepArtDgv.CurrentRow.Cells["Sort"].Value.ToString().Trim().ToUpper();
                    string workTimeValue = StepArtDgv.CurrentRow.Cells["WorkTime"].Value == null ? "" : StepArtDgv.CurrentRow.Cells["WorkTime"].Value.ToString().Trim();
                    string stripWorkTimeValue = StepArtDgv.CurrentRow.Cells["stripWorkTime"].Value == null ? "" : StepArtDgv.CurrentRow.Cells["stripWorkTime"].Value.ToString().Trim();
                    string gridWorkTimeValue = StepArtDgv.CurrentRow.Cells["gridWorkTime"].Value == null ? "" : StepArtDgv.CurrentRow.Cells["gridWorkTime"].Value.ToString().Trim();
                 
                }
            }

  • 相关阅读:
    windows下用cmd命令netstat查看系统端口使用情况
    linux 运维知识体系
    Oracle中MD5+Base64加密实现
    MySql学习—— 查询性能优化 深入理解MySql如何执行查询
    Mysql集群和主从
    Docker搭建 oracle
    docker容器以ROOT账号登录(获取ROOT权限/ROOT密码)
    一文看懂javaGC
    Docker 国内仓库和镜像
    排序算法___堆排序
  • 原文地址:https://www.cnblogs.com/FLWL/p/4155879.html
Copyright © 2011-2022 走看看