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. 〖Linux〗通过USB连接,共享Linux上的网络,使用Android手机上网。

    1. Android手机上打开USB共享 2. Linux上修改USB0的ip地址并启用 sudo ifconfig usb0 192.168.42.127 up 3. Android手机上修改路由表 ...

  2. Yii1.1应用升级到Yii2.0的一些注意点

    1. 应用程序实例直接使用全局命名变量来訪问:$app,而无须调用app() 2. Yii2在视图层的一个显著改变是引入了视图类,这样在MVC模式实现上更为完整. 对应的,相关展现层附属类就由新的视图 ...

  3. 转:TCP/IP协议选项——TCP_KEEPALIVE .

    [+] KEEPALIVE作用 KEEPALIVE代码示例 KEEPALIVE脚本设置   1.KEEPALIVE作用 KEEPALIVE机制,是TCP协议规定的TCP层(非应用层业务代码实现的)检测 ...

  4. Android酷炫加载进度动画

    概述 本自定义动画进度酷炫View,是加载进度动画的自定义View,继承于ImageView来实现,主要实现蒙层加载进度的加载进度效果. 支持水平左右加载和垂直上下加载四个方向,同时也支持自定义蒙层进 ...

  5. ASP.NET总结

    ASP.NET已经学习完.学牛腩的时候面对一些控件和方法会用,但对当中的原理还不懂.学习这部分的内容时, 从头到尾都有一种相识的感觉,把之前一些不懂得地方也理解了,每个知识都有相应的样例练习,学起来还 ...

  6. MySQL中group_concat函数

    本文通过实例介绍了MySQL中的group_concat函数的使用方法,比如select group_concat(name) .MySQL中group_concat函数完整的语法如下:group_c ...

  7. OGNL表达式中的#、%和$

    $是el表达式  % #是ognl表达式.  http://devilkirin.iteye.com/blog/427375 OGNL表达式非常强大-其中#.%.$这三个符号在OGNL表达式中经常出现 ...

  8. jQuery knowledge

    I have used jquery for many years, but didn't list the problem I ever meeting, so here is a list of ...

  9. struts2开发流程及配置,域对象对数据存储的3种方式

    一.开发流程 1)引入 jar 包,其中必须引入的有(我是用的struts是2.3.32) commons-fileupload-1.3.2.jar     |文件上传下载commons-io-2.2 ...

  10. 在ubuntu下安装free pascal

    1.ubuntu16.04版本已经集成了free pascal最新的3.0版,只需要安装就可以了. sudo apt install fp-compiler 在ubuntu里面,fp-compiler ...