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. oracle 导入Excel数据

      oracle 导入excel数据 CreateTime--2018年1月30日14:58:51 Author:Marydon 通过plsql实现 1.准备工作 Excel中的字段名称,必须和表结构 ...

  2. 【BIRT】01_在win10上安装BIRT

    环境:windows 10 64位 安装文件:链接:https://pan.baidu.com/s/1vYGbB0D1QeQ923oIIdoI9Q 密码:qcde 说明:安装文件也可以自己去官网下载, ...

  3. Python中的迭代器漫谈

    转自:http://www.jb51.net/article/60706.htm 熟悉Python的都知道,它没有类似其它语言中的for循环, 只能通过for in的方式进行循环遍历.最典型的应用就是 ...

  4. iOS_数据库2_基础知识

    watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvcHJlX2VtaW5lbnQ=/font/5a6L5L2T/fontsize/400/fill/I0JBQk ...

  5. tp模型和数据库操作方法

    一.新建的模型名和表名一样,采用驼峰式,如表名user_type模型取名为UserType namespace app\index\model;use think\Model;class UserTy ...

  6. Django的ORM中如何判断查询结果是否为空,判断django中的orm为空

    result= Booking.objects.filter() #方法一 .exists() if result.exists(): print "QuerySet has Data&qu ...

  7. mysql group replication 安装&配置详解

    一.原起: 之前也有写过mysql-group-replication (mgr) 相关的文章.那时也没有什么特别的动力要写好它.主要是因为在 mysql-5.7.20 之前的版本的mgr都有着各种各 ...

  8. docker 下 alpine 镜像设置时区的有效办法

    在使用Docker的时候,由于很多基础linux镜像都比较大,alpine这个仅仅几兆的linux基础镜像受到了很多人喜欢,笔者也不例外,可是由于alpine中的一些配置及命令与常见的centos等系 ...

  9. Message: 'geckodriver' executable needs to be in PATH. 解决方法

    问题描述: 执行如下代码 # coding=utf-8 from selenium import webdriver driver = webdriver.Firefox() driver.maxim ...

  10. vs code git 扩展失败,提示重新加载的解决办法

    Git扩展的的问题,通过shift+command+p执行SCM: Disable Preview来回退,会发现图标被还原了,然后世界就安静了,参见更新文档里关于该问题的解释: