WPF中的DataGrid支持Excell粘贴数据
其中XMAL文件中的表格样式:
<DataGrid x:Name="DataListView" AutoGenerateColumns="False" HorizontalAlignment="Center" Margin="14,10,162,0" VerticalAlignment="Top" ItemsSource="{Binding }" CanUserAddRows="False" CanUserSortColumns="False" CanUserDeleteRows="False" Width="350" Height="239" SelectionMode="Extended" SelectionUnit="Cell">
<!-- This is required to handle CTRL + C when something is selected in the DataGrid -->
<DataGrid.CommandBindings>
<CommandBinding Command="Paste" Executed="PasteCommand" />
</DataGrid.CommandBindings>
<DataGrid.InputBindings>
<KeyBinding Key="V" Modifiers="Control" Command="Paste" />
</DataGrid.InputBindings>
<DataGrid.ColumnHeaderStyle>
<Style TargetType="DataGridColumnHeader">
<Setter Property="Background">
<Setter.Value>
<LinearGradientBrush StartPoint="0,0" EndPoint="0,1">
<GradientStop Color="White" Offset="0"/>
<GradientStop Color="Green" Offset="0.5"/>
<GradientStop Color="White" Offset="1"/>
</LinearGradientBrush>
</Setter.Value>
</Setter>
<Setter Property="Foreground" Value="Black"/>
<Setter Property="FontSize" Value="16" />
</Style>
</DataGrid.ColumnHeaderStyle>
<DataGrid.CellStyle>
<Style TargetType="DataGridCell">
<Style.Triggers >
<Trigger Property="IsSelected" Value="True">
<Setter Property="Background" Value="Snow"/>
<Setter Property="Foreground" Value="LimeGreen"/>
</Trigger>
</Style.Triggers>
</Style>
</DataGrid.CellStyle>
<DataGrid.Columns>
<!--UpdateSourceTrigger=PropertyChanged-->
<DataGridTextColumn Header="模块名称" Binding="{Binding Path=strModuleName,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}" MinWidth="80"/>
<DataGridTextColumn Header="最小值" Binding="{Binding Path=MinValue,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}" MinWidth="80" />
<DataGridTextColumn Header="最大值" Binding="{Binding Path=MaxValue,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}" MinWidth="80" />
<DataGridTextColumn Header="单位" Binding="{Binding Path=strUnit,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}" MinWidth="80" />
</DataGrid.Columns>
</DataGrid>
使用MVVM模式下的双向绑定,红色部分需要注意
后台代码如下:
/// <summary>
/// 粘贴处理剪贴板
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void PasteCommand(object sender, ExecutedRoutedEventArgs e)
{
// 获取剪切板的内容,并按行分割
string pasteText = Clipboard.GetText();
if (string.IsNullOrEmpty(pasteText))
return;
int cIndex = -1;
int rIndex = -1;
if (DataListView.SelectedCells.Count > 0)
{
DataGridCellInfo dgcInfo = DataListView.SelectedCells[0];
cIndex = dgcInfo.Column.DisplayIndex;
Dinfo dii = dgcInfo.Item as Dinfo;
rIndex = GetDinfoIndex(dii);
Console.WriteLine("("+ cIndex.ToString() + "," + rIndex.ToString() + ")");
}
string[] Rinfo = pasteText.Split(new string[]{"\r\n"}, StringSplitOptions.RemoveEmptyEntries);
if (cIndex > -1 && rIndex>-1)
{
int rSum = Math.Min(Rinfo.Length, DataListView.Items.Count - rIndex);
for(int i=0;i<rSum;i++ )
{
string[] Cinfo = Rinfo[i].Split(new string[] { "\t" }, StringSplitOptions.RemoveEmptyEntries);
int cSum = Math.Min(Cinfo.Length, DataListView.Columns.Count - cIndex);
for(int j=0;j<cSum;j++)
{
//Console.WriteLine("行:" + (rIndex + i).ToString());
//Console.WriteLine("列:" + (cIndex + j).ToString());
DataGridColumn dgcC = DataListView.Columns[cIndex + j];
//Dinfo dinfo = DataListView.Items[rIndex + i] as Dinfo;
try
{
(DataListView.Columns[cIndex + j].GetCellContent(DataListView.Items[rIndex + i]) as TextBlock).Text = Cinfo[j];
}
catch
{
}
}
}
//DataListView.Items.Refresh();
}
Console.WriteLine(pasteText);
}
private int GetDinfoIndex(Dinfo di)
{
if( displaydatas.Contains(di))
{
return displaydatas.IndexOf(di);
}
else
{
return -1;
}
}
模拟MVVM加载数据
private void Window_Loaded(object sender, RoutedEventArgs e)
{
Random rd = new Random();
for(int i=0;i<5;i++)
{
Dinfo di = new Dinfo();
di.MaxValue = 100 + rd.Next(0, 50);
di.MinValue = 10 + rd.Next(1, 80);
di.strModuleName = "模型" + i.ToString();
di.strUnit =(new[] {"C","%","-","dB","Km","Kg","mm","cm","#"})[rd.Next(0,8)];
displaydatas.Add(di);
}
DataListView.ItemsSource = displaydatas;
listView.Items.Clear();
listView.ItemsSource = displaydatas;
}
模型类:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace WpfAppShow
{
public class Dinfo: INotifyPropertyChanged
{
private string strmodulename;
private string strunit;
private int maxValue;
private int minValue;
public event PropertyChangedEventHandler PropertyChanged;
protected void OnPropertyChanged(string name)
{
PropertyChangedEventHandler handler = PropertyChanged;
if (handler != null)
{
handler(this, new PropertyChangedEventArgs(name));
}
}
public string strModuleName
{
get { return strmodulename; }
set
{
strmodulename = value;
OnPropertyChanged("strModuleName");
}
}
public string strUnit
{
get { return strunit; }
set
{
strunit = value;
OnPropertyChanged("strUnit");
}
}
public int MaxValue
{
get { return maxValue; }
set
{
maxValue = value;
OnPropertyChanged("MaxValue");
}
}
public int MinValue
{
get { return minValue; }
set
{
minValue = value;
OnPropertyChanged("MinValue");
}
}
}
}
WPF中的DataGrid支持Excell粘贴数据的更多相关文章
- WPF 中获取DataGrid 模板列中控件的对像
WPF 中获取DataGrid 模板列中控件的对像 #region 当前选定行的TextBox获得焦点 /// <summary> /// 当前选定行的TextBox获得焦点 /// &l ...
- wpf中的datagrid绑定操作按钮是否显示或者隐藏
如图,需要在wpf中的datagrid的操作那列有个确认按钮,然后在某些条件下确认按钮可见,某些情况下不可见的,放在mvc里直接在cshtml页面中if..else就行了. 但是在wpf里不行..网上 ...
- wpf中为DataGrid添加checkbox支持多选全选
项目中用到DataGrid, 需要在第一列添加checkbox, 可以多选.全选. 其中涉及的概念DataTemplate, DataGridCellStyle, DataGridCellContro ...
- 不注册COM在Richedit中使OLE支持复制粘贴
正常情况下在Richedit中使用OLE,如果需要OLE支持复制粘贴,那么这个OLE对象必须是已经注册的COM对象. 注册COM很简单,关键问题在于注册时需要管理员权限,这样一来,如果希望APP做成绿 ...
- 扩展ArcGIS API for Silverlight/WPF 中的TextSymbol支持角度标注
原文 http://blog.csdn.net/esricd/article/details/7587136 在ArcGIS API for Silverlight/WPF中原版的TextSymbol ...
- WPF中退出时显示是否保存数据提示
一.通过窗体中的按钮实现退出时数据保存提示 Xaml: <Grid> <TextBlock HorizontalAlignment="Left" Margin=& ...
- Wpf 中的DataGrid的Header属性,动态bind时不起作用
在使用wpf开发软件时,有使用到DataGrid,DataGridTextColumn的Header 属性使用DynamicResource binding,在修改绑定数据源时,header并没有更新 ...
- WPF中使用DataGrid时操作列按钮问题
在使用DataGrid的过程中,我们有时候需要对选取的某一行数据进行多个操作,这个时候操作列只有一个按钮显然无法满足我们的要求,我们需要多个按钮才能达到我们的目的. UI页面代码: <Grid& ...
- (转帖)关于easyui中的datagrid在加载数据时候报错:无法获取属性"Length"的值,对象为null或未定义
结贴说明: 很感谢sp1234等人的热心帮忙和提醒,现在我主要说明下问题所在: 首先我在独立的js文件中,直接把测试数据loaddata进去datagrid是没有问题的.var kk = {" ...
- WPF中修改DataGrid单元格值并保存
编辑DataGrid中的单元格的内容然后保存是非常常用的功能.主要涉及到的方法就是DataGrid的CellEditEnding 和BeginningEdit .其中BeginningEdit 是当 ...
随机推荐
- (读书笔记)基于CMMI的软件工程及实训指导------第一章软件工程基础
第一章------软件工程基础 1.软件工程基本原理 (1)按照软件生命周期的阶段划分制订计划,严格依据计划进行管理 (2)坚持进行阶段评审 (3)实行严格的产品控制 (4)采用现代程序设计技术 (5 ...
- 信息安全day1
课程目标:中小型网络建立.操作和故障排除,连接到WAN和实施网络安全 路由器三层协议功能 多层交换机具备三层协议的功能 终端服务器:特殊的路由器 网云:1.未知网络区域 2.不受自己管理的网络区域 A ...
- antd timePicker组件限制当前之前的时间不可选择
import React from 'react'; import ReactDOM from 'react-dom'; import {Input,DatePicker,Form,Col,Butto ...
- Python切换中英文输入法
要实现中英文切换,首先Windows系统必须要有中文语言和英文语言,才能实现输入法(语言)切换. import win32api import win32gui from win32con impor ...
- 暑假学习二 8.24 Hadoop的环境配置
今日学习内容: 主要为Hadoop的环境配置,相关配置所需文档可以留言(?)会给发送 1.hadoop介绍: 狭义: 核心组件,Hadoop hdfs 分布存储 yarn 资源管理和任务调度框架 ...
- laravel 导出
常规导出xlsx 更多的是导出小数据 需要大数据导出的时候 需要临时更改内存大小 ini_set('memory_limit', '1024M'); 不更改内存的情况 可以选择队列导出到服务器 ...
- ES操作
总结一些ES的操作方式及语法 查看健康状态 curl -XGET http://localhost:9200/_cluster/health?pretty 查看索引 curl -XGET ht ...
- JAVA XML转对象
最近遇到XML转对象进行业务操作的问题 这是我需要解析的XML 1,建XML对应自己需要参数的Bean.有的很长很乱,没必要全部建,只建自己需要的就行了 import lombok.Data; imp ...
- [2007年NOIP普及组] Hanoi双塔问题
给定A.B.C三根足够长的细柱,在A柱上放有2n个中间有孔的圆盘,共有n个不同的尺寸,每个尺寸都有两个相同的圆盘,注意这两个圆盘是不加区分的(下图为n=3的情形).现要将 这些国盘移到C柱上,在移动过 ...
- css3边框属性学习
1.boder-radius <!DOCTYPE html> <html> <head> <meta charset="utf-8" /& ...