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. HDU 5336 XYZ and Drops

    Problem Description XYZ is playing an interesting game called "drops". It is played on a r ...

  2. 铁通网络没有一个真实的公网IP,NAT转换能不能解决?

    铁通网络没有一个真实的公网IP,NAT转换能不能解决?     我的是铁通宽带,现在想用自己的机子做一个动态主机,可是因为铁通垃圾网络的NAT转发问题,使用cn99qdns手动更新动态域名IP后公网能 ...

  3. 【 Linux 】单台服务器上并发TCP连接数(转)

    单台服务器上并发TCP连接数    问题:一台服务器到底能够支持多少TCP并发连接呢? 1. 文件描述符限制:    对于服务器来说,每一个TCP连接都要占用一个文件描述符,一旦文件描述符使用完,新的 ...

  4. EMQ 压测问题

    一.单台服务器最高只能跑2W多一点问题描述 一直使用benchmark测试单台EMQ都没有超过3W链接数 一个独立的外网IP只能提供最多6W的端口号,但每个TCP需要分配一个指定的端口号.所以理论上讲 ...

  5. oracle和其他数据库对表名、列名的长度限制

    ============== 数据库 表名列名长度限制问题 今天修改数据库表名,感觉现有的定义列名都无含义...修改后被同事告知,列名有点长,怕有的数据库不支持.. 我头一次听说数据库表名和列名长度限 ...

  6. vim插件管理利器

    一.pathogen简介 通常情况下安装vim插件,通常是将所有的插件和相关的doc文件都安装在中一文件夹中,如将插件全部安装在/usr/share/vim/vim73/plugin/目录下,将帮助文 ...

  7. Atitit.软件按钮与仪表盘(13)--全文索引操作--db数据库子系统mssql2008

    Atitit.软件按钮与仪表盘(13)--全文索引操作--db数据库子系统mssql2008 全文索引操作 4.全文索引和like语句比较 1 5.倒排索引 inverted index 1 2.SQ ...

  8. poj1936

    非连续子串匹配题,直接模拟 /** \brief poj 1936 * * \param date 2014/8/5 * \param state AC * \return memory 804k t ...

  9. 收集整理的mybatis资料

    这是个系列文章,讲的非常不错 mybatis 详解(一)------JDBC  https://www.cnblogs.com/ysocean/p/7271600.html mybatis  http ...

  10. Logstash日志字段拆分grok

    参考和测试网站:http://grokdebug.herokuapp.com 例如:test-39.dev.abc-inc.com Mon Apr 24 13:53:58 CST 2017 2017- ...