首页 > 经济 > 正文

【焦点热闻】DataGridView完美解决复制粘贴功能

来源:博客园 发布日期:2023-05-27 10:25:29 分享到:


(相关资料图)

//在DataGridView的PreviewKeyDown事件中

private void dataGridView1_PreviewKeyDown(object sender, PreviewKeyDownEventArgs e){if (e.Control && e.KeyCode == Keys.V) // 判断是否按下ctrl+v{Paste(dataGridView1, "", 0, false);//粘贴代码}} 

粘贴,行数和列数不足时,自动添加行数列数。

#region 粘贴public int Paste(DataGridView dgv, string pasteText, int kind, bool b_cut){try{if (kind == 0){pasteText = Clipboard.GetText();}if (string.IsNullOrEmpty(pasteText))return -1;int rowNum = 0;int columnNum = 0;//获得当前剪贴板内容的行、列数for (int i = 0; i < pasteText.Length; i++){if (pasteText.Substring(i, 1) == "\t"){columnNum++;}if (pasteText.Substring(i, 1) == "\n"){rowNum++;}}Object[,] data;//粘贴板上的数据来自于EXCEL时,每行末都有\n,在DATAGRIDVIEW内复制时,最后一行末没有\nif (pasteText.Substring(pasteText.Length - 1, 1) == "\n"){rowNum = rowNum - 1;}columnNum = columnNum / (rowNum + 1);data = new object[rowNum + 1, columnNum + 1];String rowStr;//对数组赋值for (int i = 0; i < (rowNum + 1); i++){for (int colIndex = 0; colIndex < (columnNum + 1); colIndex++){rowStr = null;//一行中的最后一列if (colIndex == columnNum && pasteText.IndexOf("\r") != -1){rowStr = pasteText.Substring(0, pasteText.IndexOf("\r"));}//最后一行的最后一列if (colIndex == columnNum && pasteText.IndexOf("\r") == -1){rowStr = pasteText.Substring(0);}//其他行列if (colIndex != columnNum){rowStr = pasteText.Substring(0, pasteText.IndexOf("\t"));pasteText = pasteText.Substring(pasteText.IndexOf("\t") + 1);}if (rowStr == string.Empty)rowStr = null;data[i, colIndex] = rowStr;}//截取下一行数据pasteText = pasteText.Substring(pasteText.IndexOf("\n") + 1);}/*检测值是否是列头*//*//获取当前选中单元格所在的列序号int columnindex = dgv.CurrentRow.Cells.IndexOf(dgv.CurrentCell);//获取获取当前选中单元格所在的行序号int rowindex = dgv.CurrentRow.Index;*/int columnindex = -1, rowindex = -1;int columnindextmp = -1, rowindextmp = -1;if (dgv.SelectedCells.Count != 0){columnindextmp = dgv.SelectedCells[0].ColumnIndex;rowindextmp = dgv.SelectedCells[0].RowIndex;}//取到最左上角的 单元格编号foreach (DataGridViewCell cell in dgv.SelectedCells){//dgv.Rows[cell.RowIndex].Selected = true;columnindex = cell.ColumnIndex;if (columnindex > columnindextmp){//交换columnindex = columnindextmp;}elsecolumnindextmp = columnindex;rowindex = cell.RowIndex;if (rowindex > rowindextmp){rowindex = rowindextmp;rowindextmp = rowindex;}elserowindextmp = rowindex;}if (kind == -1){columnindex = 0;rowindex = 0;}//如果行数超过当前列表行数if (rowindex + rowNum + 1 > dgv.RowCount){int mm = rowNum + rowindex + 1 - dgv.RowCount;for (int ii = 0; ii < mm + 1; ii++){dgv.DataBindings.Clear();DataRow row = row = ds.Tables[0].NewRow();ds.Tables[0].Rows.InsertAt(row, ii + rowindex + 1);}}//如果列数超过当前列表列数if (columnindex + columnNum + 1 > dgv.ColumnCount){int mmm = columnNum + columnindex + 1 - dgv.ColumnCount;for (int iii = 0; iii < mmm; iii++){dgv.DataBindings.Clear();DataGridViewTextBoxColumn colum = new DataGridViewTextBoxColumn();dgv.Columns.Insert(columnindex + 1, colum);}}//增加超过的行列for (int j = 0; j < (rowNum + 1); j++){for (int colIndex = 0; colIndex < (columnNum + 1); colIndex++){if (colIndex + columnindex < dgv.Columns.Count){if (dgv.Columns[colIndex + columnindex].CellType.Name == "DataGridViewTextBoxCell"){if (dgv.Rows[j + rowindex].Cells[colIndex + columnindex].ReadOnly == false){dgv.Rows[j + rowindex].Cells[colIndex + columnindex].Value = data[j, colIndex];dgv.Rows[j + rowindex].Cells[colIndex + columnindex].Selected = true;}}}}}//清空剪切板内容if (b_cut)Clipboard.Clear();return 1;}catch{return -1;}}#endregion

关键词:

x 广告

【焦点热闻】DataGridView完美解决复制粘贴功能

在DataGridView的PreviewKeyDown事件中privatevoiddataGridView1_PreviewKeyDown(objectsender,PreviewKeyDownEventArgse){if(e Control&&e Key

乌空军称击落俄军10枚巡航导弹 乌空军俄发动大规模袭击动用17枚导弹31架无人机”(今日/头条)|当前信息

一、乌空军称击落俄军10枚巡航导弹据美国有线电视新闻网26日报道,乌克兰空军当天宣布,从25日晚到26日清晨

怀孕肚子咕咕响是怎么回事_肚子咕咕响是怎么回事

1、可以认为是脾胃虚弱,导致大肠运化吸收不正常而引起的症状。2、建议可口服健脾固运中药,如沈凌白术散、

甘州区南街街道举办“政务服务网上办件”精英赛

甘州融媒讯5月26日,甘州区南街街道举办“抓学习促提升、抓执行促落实、抓效能促发展”典型培树系列活动之

大宗交易:天微电子成交447.98万元,折价1.01%(05-26)|全球速看

2023年5月26日,天微电子发生1笔大宗交易,总成交13万股,成交金额447 98万元,成交价34 46元,折价1 01%。

世界快播:浙海德曼(688577):股价成功突破年线压力位-后市看多(涨)(05-26)

所属板块:通用设备目前板块处于上涨趋势;相关个股中,泰福泵业、凌霄泵业、大元泵业涨幅较大,涨幅分别为

空调指示灯闪烁空调不工作(空调指示灯在闪烁却不能用是怎么回事)

来为大家解答以上问题。空调指示灯闪烁空调不工作,空调指示灯在闪烁却不能用是怎么回事这个很多人还不清楚

曲面切平面的法向量怎么求_平面的法向量怎么求 微资讯

1、设法向量为(XYZ),找平面内的任意两条直线(但不平行),线段也行,并写出他们的向量P1P2。2、法向

x 广告

Copyright   2015-2022 东方海洋网版权所有  备案号:沪ICP备2020036824号-8   联系邮箱:562 66 29@qq.com