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. SpringMVC与SiteMesh

    SpringMVC与SiteMesh2.4无缝整合并借助JSR303规范实现表单验证 SiteMesh3.0的下载,简介与使用 总结: springmvc结合sitemesh总共分三步: 1.添加si ...

  2. java 判断日期是否是节假日

    1.新建一个excel命名为“节假日.xls”存放节假日,模板格式如下 2.判断是否是节假日的类 工作日返回true ,休息日返回false. 需要引用poi-bin-3.9包,包放在博客文件中 im ...

  3. Python-线程的生命周期

    线程的生命周期 所谓的xx生命周期,其实就是某对象的包含产生和销毁的一张状态图.线程的生命周期如下图所示: 各状态的说明如下: New新建.新创建的线程经过初始化后,进入Runnable状态. Run ...

  4. Linux命令-压缩解压命令:gzip、gunzip

    gzip [选项] 源文件名(压缩前) gunzip [选项] 源文件名(压缩后) cd /tmp 切换tmp目录 rm -rf * 强制删除tmp目录下面所有的文件和目录 touch beijing ...

  5. EMQ ---客户端clientid为空,emq会随机帮忙生成

    mqtt v3.1.1协议有规定clientid可以为空,所以当客户端clientid为空,emq会随机帮忙生成. 如果clientid为空,随机生成clientid.例如'emqttd_105789 ...

  6. 摘:通过ICursor对Table进行操作(添加、修改、删除)

    通过ICursor对Table进行操作(添加.修改.删除) 连接上数据表的目的就是对其进行包括浏览.添加.修改.删除等基本操作. 浏览功能,之前文章中一提到,就是将Itable转换为DataTable ...

  7. C#:xml操作(待补充)

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.X ...

  8. 摘:C++:用ADO操作数据库的方法步骤

      ADO接口简介 ADO库包含三个基本接口:_ConnectionPtr接口._CommandPtr接口和_RecordsetPtr接口. _ConnectionPtr接口返回一个记录集或一个空指针 ...

  9. DevExpress实现GridControl删除所有行的方法

    /// <summary> /// 删除全部行 /// </summary> /// <param name="gridView">GridVi ...

  10. spring boot test中mockito的运用

    mock的意义 在微服务盛行的当下,开发过程中往往出现A应用中某功能的实现需要调用B应用的接口,无论使用RPC还是restful都需要B应用提供接口的实现整个开发工作才能继续进行.从而导致A应用的开发 ...