WPF的DataGrid控件不能像winform的DataGridView控件一样,支持值的粘贴。WPF的DataGrid控件本质上是跟数据绑定联系在一起,所以需要进行复制粘贴的操作,可以在wpf里用DataGridView控件。如果想进行DataGrid的复制粘贴,只需要在进行复制粘贴的时候,将剪切板上的数据替换成绑定的数据,同样,插入删除等操作,都是改变绑定数据。如下,是一个粘贴的方法,将剪切板的数据转化为绑定数据。

  1. #region ctrl+c粘贴
  2. private void DataGirdViewCellPaste()
  3. {
  4. try
  5. {
  6. // 获取剪切板的内容,并按行分割
  7. string pasteText = Clipboard.GetText();
  8. if (string.IsNullOrEmpty(pasteText))
  9. return;
  10. int tnum = 0;//剪贴板列数
  11. int nnum = 0;//剪贴板行数
  12. //获得当前剪贴板内容的行、列数
  13. for (int i = 0; i < pasteText.Length; i++)
  14. {
  15. if (pasteText.Substring(i, 1) == "\t")
  16. {
  17. tnum++;
  18. }
  19. if (pasteText.Substring(i, 1) == "\n")
  20. {
  21. nnum++;
  22. }
  23. }
  24. Object[,] data;
  25. //粘贴板上的数据来自于EXCEL时,每行末都有\n,在DATAGRIDVIEW内复制时,最后一行末没有\n
  26. if (pasteText.Substring(pasteText.Length - 1, 1) == "\n")
  27. {
  28. nnum = nnum - 1;
  29. }
  30. tnum = tnum / (nnum + 1);
  31. data = new object[nnum + 1, tnum + 1];//定义一个二维数组
  32. String rowstr;
  33. rowstr = "";
  34. //MessageBox.Show(pasteText.IndexOf("B").ToString());
  35. //对数组赋值
  36. for (int i = 0; i < (nnum + 1); i++)
  37. {
  38. for (int colIndex = 0; colIndex < (tnum + 1); colIndex++)
  39. {
  40. //一行中的最后一列
  41. if (colIndex == tnum && pasteText.IndexOf("\r") != -1)
  42. {
  43. rowstr = pasteText.Substring(0, pasteText.IndexOf("\r"));
  44. }
  45. //最后一行的最后一列
  46. if (colIndex == tnum && pasteText.IndexOf("\r") == -1)
  47. {
  48. rowstr = pasteText.Substring(0);
  49. }
  50. //其他行列
  51. if (colIndex != tnum)
  52. {
  53. rowstr = pasteText.Substring(0, pasteText.IndexOf("\t"));
  54. pasteText = pasteText.Substring(pasteText.IndexOf("\t") + 1);
  55. }
  56. data[i, colIndex] = rowstr;
  57. }
  58. //截取下一行数据
  59. pasteText = pasteText.Substring(pasteText.IndexOf("\n") + 1);
  60. }
  61. //获取获取当前选中单元格所在的行序号
  62. int rowindex = dataGrid.SelectedIndex;
  63. List<BoxGriderModel> listBoxGriderModel = new List<BoxGriderModel>();
  64. for (int j = 0; j < (nnum + 1); j++)
  65. {
  66. listBoxGriderModel.Add(new BoxGriderModel(double.Parse(data[j, 0].ToString()), double.Parse(data[j, 1].ToString()), double.Parse(data[j, 2].ToString()), double.Parse(data[j, 3].ToString()),
  67. double.Parse(data[j, 4].ToString()), double.Parse(data[j, 5].ToString()), double.Parse(data[j, 6].ToString())));
  68. }
  69. m_model.ListBoxGriderModel = listBoxGriderModel;
  70. this.dataGrid.ItemsSource = m_model.ListBoxGriderModel;
  71. }
  72. catch
  73. {
  74. MessageBox.Show("粘贴区域大小不一致");
  75. return;
  76. }
  77. }
  78. #endregion

WPF的DataGrid控件从excel里复制数据然后粘贴的更多相关文章

  1. WPF 4 DataGrid 控件(进阶篇一)

    原文:WPF 4 DataGrid 控件(进阶篇一)      上一篇<WPF 4 DataGrid 控件(自定义样式篇)>中,我们掌握了DataGrid 列表头.行表头.行.单元格相关的 ...

  2. WPF 4 DataGrid 控件(进阶篇二)

    原文:WPF 4 DataGrid 控件(进阶篇二)      上一篇<WPF 4 DataGrid 控件(进阶篇一)>中我们通过DataGridTemplateColumn 类自定义编辑 ...

  3. WPF 4 DataGrid 控件(基本功能篇)

    原文:WPF 4 DataGrid 控件(基本功能篇)      提到DataGrid 不管是网页还是应用程序开发都会频繁使用.通过它我们可以灵活的在行与列间显示各种数据.本篇将详细介绍WPF 4 中 ...

  4. WPF 4 DataGrid 控件(自定义样式篇)

    原文:WPF 4 DataGrid 控件(自定义样式篇)      在<WPF 4 DataGrid 控件(基本功能篇)>中我们已经学习了DataGrid 的基本功能及使用方法.本篇将继续 ...

  5. WPF中DataGrid控件内Button的Command和CommandParameter的绑定

    场景:视频上传功能,上传列表使用DataGrid控件,视频有不同的状态对应不同的操作,DataGrid中最后一列为操作列,里面是Button控件.希望点击Button后执行对应的操作,但是设置Butt ...

  6. WPF中DataGrid控件的过滤(Filter)性能分析及优化

    DataGrid控件是一个列表控件, 可以进行过滤,排序等.本文主要针对DataGrid的过滤功能进行分析, 并提供优化方案. 1)DataGrid的过滤过程:      用户输入过滤条件       ...

  7. WPF 自定义DataGrid控件样式

    内容转自https://www.cnblogs.com/xiaogangqq123/archive/2012/05/07/2487166.html 一.DataGrid基本样式(一) 小刚已经把Dat ...

  8. 关于使用MVVM模式在WPF的DataGrid控件中实现ComboBox编辑列

    最近在做一个组态软件的项目,有一个需求需要在建立IO设备变量的时候选择变量的类型等. 建立IO变量的界面是一个DataGrid实现的,可以一行一行的新建变量,如下如所示: 这里需要使用带有ComboB ...

  9. Working Experience - WPF 中 DataGrid 控件的应用

    问题: 添加控件后, 编辑单元格会出现异常 绑定 ItemsSource 属性后, 更新绑定对象的数据, UI 不刷新 如何显示控件中 ComboBox 类型 解决方法: 绑定 ItemsSource ...

随机推荐

  1. Learn X in Y minutes Where X=c++

    http://learnxinyminutes.com/docs/c++/ C++ is a systems programming language that, according to its i ...

  2. 交叉编译Node.js到OpenWrt(HG255D)

    操作系统:deepin linux 2013 或 ubuntu 13.04 1.安装交叉编译前.须要安装的包 sudo apt-get install build-essential subversi ...

  3. IOS基于XMPP协议开发--XMPPFramewok框架(一):基础知识

    最近蘑菇街团队的TT的开源,使我对im产生了兴趣,然后在网上找到了XMPPFramework进行学习研究, 并写了以下系列教程供大家参考,有写的不对的地方,请大家多多包涵指正. 目录索引 IOS基于X ...

  4. 查看Linux是32位还是64位的方法

    发布:JB01   来源:脚本学堂     [大 中 小] 本文介绍下,快速查看linux系统是32位还是64位的方法,有需要的朋友参考下吧. 本节内容:查看linux操作系统的位数 一,方法A:un ...

  5. [Objective C]super dealloc 调用时机

    转自:http://dcm19872007.blog.163.com/blog/static/86519374201311953739818/ objective-c 语言中最头疼的事就是内存释放,申 ...

  6. UIApplication深入学习

    多时候,我们不需要关心这个类,我们很少继承这个类,偶尔会调用这个类的api来实现一些功能,但是不可否认,这个类是iOS编程中很重要的一个概念.UIApplication的核心作用是提供了iOS程序运行 ...

  7. error: invalid use of incomplete type

    一般出现这种情况都是没有将用到的头文件包含进来 我的情况是在头文件中定义了一个QMenu的指针,在源文件中使用menuBar()函数来返回一个menu指针.我在源文件中包含了文件<QtGui&g ...

  8. 【转】logstash配置java环境

    1.bin/logstash,新增 JAVA_CMD=/home/admin/soft/jdk1.8.0_121/bin JAVA_HOME=/home/admin/soft/jdk1.8.0_121 ...

  9. 【转】Elasticsearch5.0 安装问题集锦

    Elasticsearch5.0 安装问题集锦 elasticsearch 5.0 安装过程中遇到了一些问题,通过查找资料几乎都解决掉了,这里简单记录一下 ,供以后查阅参考,也希望可以帮助遇到同样问题 ...

  10. python正则表达式匹配时间和IP地址

    t = '19:16:30' mt = re.match(r'^(0[0-9]|1[0-9]|2[0-3]|[0-9])\:(0[0-9]|1[0-9]|2[0-9]|3[0-9]|4[0-9]|5[ ...