WPF的DataGrid控件从excel里复制数据然后粘贴
WPF的DataGrid控件不能像winform的DataGridView控件一样,支持值的粘贴。WPF的DataGrid控件本质上是跟数据绑定联系在一起,所以需要进行复制粘贴的操作,可以在wpf里用DataGridView控件。如果想进行DataGrid的复制粘贴,只需要在进行复制粘贴的时候,将剪切板上的数据替换成绑定的数据,同样,插入删除等操作,都是改变绑定数据。如下,是一个粘贴的方法,将剪切板的数据转化为绑定数据。
- #region ctrl+c粘贴
- private void DataGirdViewCellPaste()
- {
- try
- {
- // 获取剪切板的内容,并按行分割
- string pasteText = Clipboard.GetText();
- if (string.IsNullOrEmpty(pasteText))
- return;
- int tnum = 0;//剪贴板列数
- int nnum = 0;//剪贴板行数
- //获得当前剪贴板内容的行、列数
- for (int i = 0; i < pasteText.Length; i++)
- {
- if (pasteText.Substring(i, 1) == "\t")
- {
- tnum++;
- }
- if (pasteText.Substring(i, 1) == "\n")
- {
- nnum++;
- }
- }
- Object[,] data;
- //粘贴板上的数据来自于EXCEL时,每行末都有\n,在DATAGRIDVIEW内复制时,最后一行末没有\n
- if (pasteText.Substring(pasteText.Length - 1, 1) == "\n")
- {
- nnum = nnum - 1;
- }
- tnum = tnum / (nnum + 1);
- data = new object[nnum + 1, tnum + 1];//定义一个二维数组
- String rowstr;
- rowstr = "";
- //MessageBox.Show(pasteText.IndexOf("B").ToString());
- //对数组赋值
- for (int i = 0; i < (nnum + 1); i++)
- {
- for (int colIndex = 0; colIndex < (tnum + 1); colIndex++)
- {
- //一行中的最后一列
- if (colIndex == tnum && pasteText.IndexOf("\r") != -1)
- {
- rowstr = pasteText.Substring(0, pasteText.IndexOf("\r"));
- }
- //最后一行的最后一列
- if (colIndex == tnum && pasteText.IndexOf("\r") == -1)
- {
- rowstr = pasteText.Substring(0);
- }
- //其他行列
- if (colIndex != tnum)
- {
- rowstr = pasteText.Substring(0, pasteText.IndexOf("\t"));
- pasteText = pasteText.Substring(pasteText.IndexOf("\t") + 1);
- }
- data[i, colIndex] = rowstr;
- }
- //截取下一行数据
- pasteText = pasteText.Substring(pasteText.IndexOf("\n") + 1);
- }
- //获取获取当前选中单元格所在的行序号
- int rowindex = dataGrid.SelectedIndex;
- List<BoxGriderModel> listBoxGriderModel = new List<BoxGriderModel>();
- for (int j = 0; j < (nnum + 1); j++)
- {
- 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()),
- double.Parse(data[j, 4].ToString()), double.Parse(data[j, 5].ToString()), double.Parse(data[j, 6].ToString())));
- }
- m_model.ListBoxGriderModel = listBoxGriderModel;
- this.dataGrid.ItemsSource = m_model.ListBoxGriderModel;
- }
- catch
- {
- MessageBox.Show("粘贴区域大小不一致");
- return;
- }
- }
- #endregion
WPF的DataGrid控件从excel里复制数据然后粘贴的更多相关文章
- WPF 4 DataGrid 控件(进阶篇一)
原文:WPF 4 DataGrid 控件(进阶篇一) 上一篇<WPF 4 DataGrid 控件(自定义样式篇)>中,我们掌握了DataGrid 列表头.行表头.行.单元格相关的 ...
- WPF 4 DataGrid 控件(进阶篇二)
原文:WPF 4 DataGrid 控件(进阶篇二) 上一篇<WPF 4 DataGrid 控件(进阶篇一)>中我们通过DataGridTemplateColumn 类自定义编辑 ...
- WPF 4 DataGrid 控件(基本功能篇)
原文:WPF 4 DataGrid 控件(基本功能篇) 提到DataGrid 不管是网页还是应用程序开发都会频繁使用.通过它我们可以灵活的在行与列间显示各种数据.本篇将详细介绍WPF 4 中 ...
- WPF 4 DataGrid 控件(自定义样式篇)
原文:WPF 4 DataGrid 控件(自定义样式篇) 在<WPF 4 DataGrid 控件(基本功能篇)>中我们已经学习了DataGrid 的基本功能及使用方法.本篇将继续 ...
- WPF中DataGrid控件内Button的Command和CommandParameter的绑定
场景:视频上传功能,上传列表使用DataGrid控件,视频有不同的状态对应不同的操作,DataGrid中最后一列为操作列,里面是Button控件.希望点击Button后执行对应的操作,但是设置Butt ...
- WPF中DataGrid控件的过滤(Filter)性能分析及优化
DataGrid控件是一个列表控件, 可以进行过滤,排序等.本文主要针对DataGrid的过滤功能进行分析, 并提供优化方案. 1)DataGrid的过滤过程: 用户输入过滤条件 ...
- WPF 自定义DataGrid控件样式
内容转自https://www.cnblogs.com/xiaogangqq123/archive/2012/05/07/2487166.html 一.DataGrid基本样式(一) 小刚已经把Dat ...
- 关于使用MVVM模式在WPF的DataGrid控件中实现ComboBox编辑列
最近在做一个组态软件的项目,有一个需求需要在建立IO设备变量的时候选择变量的类型等. 建立IO变量的界面是一个DataGrid实现的,可以一行一行的新建变量,如下如所示: 这里需要使用带有ComboB ...
- Working Experience - WPF 中 DataGrid 控件的应用
问题: 添加控件后, 编辑单元格会出现异常 绑定 ItemsSource 属性后, 更新绑定对象的数据, UI 不刷新 如何显示控件中 ComboBox 类型 解决方法: 绑定 ItemsSource ...
随机推荐
- 【Oracle】IMP-00010: not a valid export file, header failed verification
别人给了一个Oracle文件,结果在导入的时候发现有问题,报错如下: IMP-00010: not a valid export file, header failed verification 在网 ...
- Python-线程的生命周期
线程的生命周期 所谓的xx生命周期,其实就是某对象的包含产生和销毁的一张状态图.线程的生命周期如下图所示: 各状态的说明如下: New新建.新创建的线程经过初始化后,进入Runnable状态. Run ...
- js日期控件
My97日期控件 官方网站 My97 Datepicker Home http://www.my97.net/
- django 官方文档下载
今天发现自己的django文档有点过时了,于是想去下载一份新,找了老半天才找到pdf的下载地址:于是把它记录下来,希望以后可以直接用. 一.进行django官方网站: 二.文档的pdf文件就在docu ...
- IOS委托,实现两个UIView相互传值
转自:http://my.oschina.net/wbei/blog/89325 detegate委托在IOS中是一种随处可见的模式,通俗的说,就是我把想做的某件事委托给其他人去做,就好像Java中的 ...
- 12. Min Stack【medium】
Implement a stack with min() function, which will return the smallest number in the stack. It should ...
- Vs code 通用插件
Vs code 通用插件 转自:https://segmentfault.com/a/1190000006697219 HTML Snippets 超级实用且初级的 H5代码片段以及提示 HTML C ...
- vue的路由使用
1). 安装 vue-router npm install vue-router --save 2). 新建路由配置 安装成功后,在 src 新建 router 文件夹,然后新建 index.js 文 ...
- Linux strace命令使用详解
strace是Linux环境下的一款程序调试工具,用来监察一个应用程序所使用的系统调用及它所接收的系统信息. 可谓是 linux 下的调试利器,不仅可以用来找程序错误,系统为什么挂死了,命令为什么报错 ...
- 工作流Activiti的学习总结(十二) activiti官方十分钟快速学习 (zhuan)
http://topmanopensource.iteye.com/blog/1315341 ***************************************************** ...