【DevExpress】(多行粘贴、块粘贴)

news/2024/10/18 16:04:55

复制是GridControl自带的属性,主要解决的是多个单元格复制的问题,这里涉及到两个参数。

 

主要是粘贴的

先定义两个全局变量,在单元格点击事件的时候获取单元格的行号和列号

 1     //获取当前选中单元格所在的列序号
 2    int curntindex;
 3    //获取获取当前选中单元格所在的行序号
 4    int rowindex;
 5    private void GV_RowCellClick(object sender, RowCellClickEventArgs e)
 6         {
 7             //获取当前选中单元格所在的列序号
 8             curntindex = e.Column.ColumnHandle;
 9             //获取获取当前选中单元格所在的行序号
10             rowindex = e.RowHandle;
11  
12             //MessageBox.Show(curntindex.ToString());
13             //MessageBox.Show(rowindex.ToString());
14         }

然后定义个函数,对剪切板的数据进行格式处理

 

  1   private void Paste()
  2         {
  3             try
  4             {
  5                 GridControl x = (GridControl)gridControl1;
  6                 DataTable dt = x.DataSource as DataTable;
  7                 // 获取剪切板的内容,并按行分割
  8                 string pasteText = Clipboard.GetText();
  9                 MessageBox.Show(pasteText);
 10                 if (string.IsNullOrEmpty(pasteText))
 11                 {
 12                     MessageBox.Show("剪切板内容为空,请重新复制!");
 13                     return;
 14                 }
 15  
 16                 int tnum = 0;
 17                 int nnum = 0;
 18                 //获得当前剪贴板内容的行、列数
 19                 for (int i = 0; i < pasteText.Length; i++)
 20                 {
 21                     if (pasteText.Substring(i, 1) == "\t")
 22                     {
 23                         tnum++;
 24                     }
 25                     if (pasteText.Substring(i, 1) == "\n")
 26                     {
 27                         nnum++;
 28                     }
 29                 }
 30                 Object[,] data;
 31                 //粘贴板上的数据来自于EXCEL时,每行末都有\n,在DATAGRIDVIEW内复制时,最后一行末没有\n
 32                 if (pasteText.Substring(pasteText.Length - 1, 1) == "\n")
 33                 {
 34                     nnum = nnum - 1;
 35  
 36                 }
 37  
 38                 tnum = tnum / (nnum + 1);
 39                 data = new object[nnum + 1, tnum + 1];//定义一个二维数组
 40  
 41                 String rowstr;
 42                 rowstr = "";
 43                 //MessageBox.Show(pasteText.IndexOf("B").ToString());
 44                 //对数组赋值
 45                 for (int i = 0; i < (nnum + 1); i++)
 46                 {
 47                     for (int colIndex = 0; colIndex < (tnum + 1); colIndex++)
 48                     {
 49                         //一行中的最后一列
 50                         if (colIndex == tnum && pasteText.IndexOf("\r") != -1)
 51                         {
 52                             rowstr = pasteText.Substring(0, pasteText.IndexOf("\r"));
 53                         }
 54                         //最后一行的最后一列
 55                         if (colIndex == tnum && pasteText.IndexOf("\r") == -1)
 56                         {
 57                             rowstr = pasteText.Substring(0);
 58                         }
 59                         //其他行列
 60                         if (colIndex != tnum)
 61                         {
 62                             rowstr = pasteText.Substring(0, pasteText.IndexOf("\t"));
 63                             pasteText = pasteText.Substring(pasteText.IndexOf("\t") + 1);
 64                         }
 65                         data[i, colIndex] = rowstr;
 66                     }
 67                     //截取下一行数据
 68                     pasteText = pasteText.Substring(pasteText.IndexOf("\n") + 1);
 69  
 70                 }
 71  
 72  
 73  
 74                 for (int j = 0; j < (nnum + 1); j++)
 75                 {
 76                     for (int colIndex = 0; colIndex < (tnum + 1); colIndex++)
 77                     {
 78                          gridView1.SetRowCellValue(j + currentRowIndex, gridView1.Columns[colIndex + currentColumIndex].FieldName, data[j, colIndex]);
 79                         //GV.Rows[j + rowindex].Cells[colIndex + curntindex].Value = data[j, colIndex];
 80                     }
 81                 }
 82  
 83  
 84                 //string[] lines = pasteText.Split(new char[] { ' ', ' ' });
 85                 //string s = String.Join("' '", lines);
 86                 //MessageBox.Show(s);
 87                 //foreach (string line in lines)
 88                 //{
 89                 //    if (string.IsNullOrEmpty(line.Trim()))
 90                 //        continue;
 91                 //    // 按 Tab 分割数据
 92                 //    string[] vals = line.Split(' ');
 93                 //    dt.Rows.Add(vals);
 94  
 95             }
 96             catch
 97             {
 98                 // 不处理
 99             }
100         }

 然后在GridView的KeyDown事件设置粘贴快捷键Ctrl+V

1  private void Grid_KeyDown(object sender, KeyEventArgs e)
2         {
3            if ((e.Control == true) && e.KeyCode == Keys.V)
4             {
5                 Paste();
6             }
7         }

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.ryyt.cn/news/73102.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈,一经查实,立即删除!

相关文章

Jenkins+Coverage的代码覆盖率集成实践

Jenkins+Coverage的代码覆盖率集成实践 一、工具介绍Jenkins: Jenkins是一个开源的、基于Java开发的持续集成工具,它可以帮助开发人员自动化构建、测试和部署软件项目。 Coverage: Coverage是一个Python代码覆盖率工具,用于测量代码执行过程中哪些代码行被执行到,从而评估…

C++顺序结构(3)、数据类型_____教学

一、设置域宽setw() 输出的内容所占的总宽度成为域宽,有些高级语言中称为场宽。 使用setw()前,必须包含头文件iomanip,即#include<iomanip> 头文件iomanip,用来声明一些“流操作符”,需要一定格式输入输出时,就需要用到它,比较常用的有设置域宽、设置左右对齐、设置…

OpenCity: Open Spatio-Temporal Foundation Models for Traffic Prediction

1. 数据准备 在这个数据处理过程中,以数据集 PEMS07M 为例,整个数据抽取和划分过程如下:初始数据维度:原始训练数据 data_train 的维度为 (12672, 228, 3)。其中:12672 表示时间步数,代表不同的时间点采样的数据。 228 表示空间节点数(例如不同的交通站点)。 3 表示每个…

04C++顺序结构(3)

1、设置域宽setw(); 2、cin语句; 3、输入输出.格式化一、设置域宽setw() 输出的内容所占的总宽度成为域宽,有些高级语言中称为场宽。 使用setw()前,必须包含头文件iomanip,即#include<iomanip> 头文件iomanip,用来声明一些“流操作符”,需要一定格式输入输出时,就…

轻松上手-MVVM模式_关系型数据库_云函数T云数据库

作者:狼哥 团队:坚果派 团队介绍:坚果派由坚果等人创建,团队拥有12个华为HDE带领热爱HarmonyOS/OpenHarmony的开发者,以及若干其他领域的三十余位万粉博主运营。专注于分享HarmonyOS/OpenHarmony、ArkUI-X、元服务、仓颉。团队成员聚集在北京,上海,南京,深圳,广州,宁…

九宫格自由流转拼图游戏

作者:狼哥 团队:坚果派 团队介绍:坚果派由坚果等人创建,团队拥有12个华为HDE带领热爱HarmonyOS/OpenHarmony的开发者,以及若干其他领域的三十余位万粉博主运营。专注于分享HarmonyOS/OpenHarmony、ArkUI-X、元服务、仓颉。团队成员聚集在北京,上海,南京,深圳,广州,宁…

轻松上手-Navigation路由 H5

作者:狼哥 团队:坚果派 团队介绍:坚果派由坚果等人创建,团队拥有12个华为HDE带领热爱HarmonyOS/OpenHarmony的开发者,以及若干其他领域的三十余位万粉博主运营。专注于分享HarmonyOS/OpenHarmony、ArkUI-X、元服务、仓颉。团队成员聚集在北京,上海,南京,深圳,广州,宁…

Audio

音频文件导入 常用格式wav mp3 aiff音频文件属性设置Force To Mono:多声道转单声道; Normalize:强制为单声道时,混合过程中被标准化 Load In Background:在后台加载时,不阻塞主线程 Ambisonic:立体混响声,非常适合360度视频和XR应用程序,如果音频文件包含立体混响声编…