private void StepArtDgv_KeyUp(object sender, KeyEventArgs e)
{ //粘贴 if (e.KeyCode == Keys.V && e.Control) { // 获取剪切板的内容,并按行分割 string pasteText = Clipboard.GetText().Replace("\r\n", "@").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("\t", "#").TrimEnd('#').Split('#');//专门存储列数 //判断是否存在非数字类型 for (int t = 0; t < Row.Length; t++) { col = Row[t].Replace("\t", "#").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("\t", "#").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("\t", "#").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("\t", "#").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("\t", "#").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("\r\n", "@").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("\t", "#").TrimEnd('#').Split('#'); for (int t = 0; t < Row.Length; t++) { col = Row[t].Replace("\t", "#").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("\t", "#").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("\t", "#").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("\t", "#").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("\t", "#").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(); } }