irpas技术客

C#实现给DevExpress中GridView表格创建指定的空白行、然后将Excel中选中的数据粘贴到GridView表格中_CoffeMilk

irpas 473

一、实现效果

测试数据内容如下:

二、实现方法 ?2.1、给GridView表格创建指定的空白行 #region 创建空白行 /// <summary> /// 创建指定空白行数 /// </summary> /// <param name="gridControl"></param> /// <param name="gridView"></param> /// <param name="dt"></param> /// <param name="rowCount"></param> private void CreateAppointBlankRow(DevExpress.XtraGrid.GridControl gridControl, DevExpress.XtraGrid.Views.Grid.GridView gridView,ref DataTable dt,int rowCount) { if (gridView==null || rowCount <= 0) return; for (int i = 0; i < rowCount; i++) { AddSingleBlankRow(gridControl1, gridView1, ref dt); } } /// <summary> /// 添加单个空白行 /// </summary> /// <param name="gridControl"></param> /// <param name="gridView"></param> /// <param name="dt"></param> private void AddSingleBlankRow(DevExpress.XtraGrid.GridControl gridControl, DevExpress.XtraGrid.Views.Grid.GridView gridView,ref DataTable dt) { if (gridControl == null || gridView == null) return; DataRow dr = dt.NewRow(); dt.Rows.Add(dr); gridControl.DataSource = dt; } /// <summary> /// 获取表格的所有列 /// </summary> /// <param name="gridView"></param> /// <returns></returns> private List<string> GetGirdViewAllFieldName(DevExpress.XtraGrid.Views.Grid.GridView gridView) { List<string> tmpList = new List<string>(); foreach (DevExpress.XtraGrid.Columns.GridColumn item in gridView.Columns) { tmpList.Add(item.FieldName); } return tmpList; } /// <summary> /// 给DataTable添加字段名称列表 /// </summary> /// <param name="fieldNameList">DataTable表的字段</param> /// <returns></returns> public static DataTable AddFieldNameToDataTable(List<string> fieldNameList) { DataTable dt = new DataTable(); if (fieldNameList != null && fieldNameList.Count > 0) { foreach (var item in fieldNameList) { dt.Columns.Add(item); } } return dt; } #endregion

创建空白行方法:

List<string> gridViewAllFieldName = GetGirdViewAllFieldName(gridView1); DataTable dt = AddFieldNameToDataTable(gridViewAllFieldName); //给表格添加5行 CreateAppointBlankRow(gridControl1,gridView1,ref dt,5); 2.2、将Excel中选中的数据粘贴到GridView表格中 /// <summary> /// 粘贴内容 /// </summary> /// <param name="gridControl">gridControl组件</param> /// <param name="gridView">girdView组件</param> private void PasteData(DevExpress.XtraGrid.GridControl gridControl, DevExpress.XtraGrid.Views.Grid.GridView gridView) { if (gridControl == null || gridView == null) return; //获取剪贴板中的内容 string clipboardText = Clipboard.GetText(); if (string.IsNullOrEmpty(clipboardText)) { return; } //获取剪贴板内容的行列 int colnum = 0; int rownum = 0; for ( int i = 0; i < clipboardText.Length; i++) { if (clipboardText.Substring(i, 1) == "\t") { colnum++; } if (clipboardText.Substring(i, 1) == "\n") { rownum++; } } colnum = colnum / rownum + 1; //获取当前选中GridView的行和列索引 int selectedRowIndex, selectedColIndex; selectedRowIndex = gridView.FocusedRowHandle; selectedColIndex = gridView.FocusedRowHandle; if (rownum > gridView.RowCount || colnum > gridView.Columns.Count) { MessageBox.Show("粘贴区域大小不一致,请重新从Excel表格中复制"); return; } String[][] temp = new String[rownum][]; for (int i = 0; i < rownum; i++) { temp[i] = new String[colnum]; } int m = 0, n = 0, len = 0; while (len != clipboardText.Length) { String str = clipboardText.Substring(len, 1); if (str == "\t") { n++; } else if (str == "\n") { m++; n = 0; } else { temp[m][n] += str; } len++; } DataTable dt = (DataTable)(gridControl.DataSource); int index = 0; for (int i = 0; i < rownum; i++) { for (int j = 0; j < colnum; j++) { dt.Rows[selectedColIndex][index] = temp[i][j]; index++; } } gridControl.DataSource = dt; }

鼠标双击事件调用该粘贴方法如下:

①选中GridControl组件,然后双击【DoubleClick】事件;

?②在该DoubleClick事件调用粘贴事件即可

//鼠标双击事件 private void gridControl1_DoubleClick(object sender, EventArgs e) { PasteData(gridControl1,gridView1); }


1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,会注明原创字样,如未注明都非原创,如有侵权请联系删除!;3.作者投稿可能会经我们编辑修改或补充;4.本站不提供任何储存功能只提供收集或者投稿人的网盘链接。