其中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粘贴数据的更多相关文章

  1. WPF 中获取DataGrid 模板列中控件的对像

    WPF 中获取DataGrid 模板列中控件的对像 #region 当前选定行的TextBox获得焦点 /// <summary> /// 当前选定行的TextBox获得焦点 /// &l ...

  2. wpf中的datagrid绑定操作按钮是否显示或者隐藏

    如图,需要在wpf中的datagrid的操作那列有个确认按钮,然后在某些条件下确认按钮可见,某些情况下不可见的,放在mvc里直接在cshtml页面中if..else就行了. 但是在wpf里不行..网上 ...

  3. wpf中为DataGrid添加checkbox支持多选全选

    项目中用到DataGrid, 需要在第一列添加checkbox, 可以多选.全选. 其中涉及的概念DataTemplate, DataGridCellStyle, DataGridCellContro ...

  4. 不注册COM在Richedit中使OLE支持复制粘贴

    正常情况下在Richedit中使用OLE,如果需要OLE支持复制粘贴,那么这个OLE对象必须是已经注册的COM对象. 注册COM很简单,关键问题在于注册时需要管理员权限,这样一来,如果希望APP做成绿 ...

  5. 扩展ArcGIS API for Silverlight/WPF 中的TextSymbol支持角度标注

    原文 http://blog.csdn.net/esricd/article/details/7587136 在ArcGIS API for Silverlight/WPF中原版的TextSymbol ...

  6. WPF中退出时显示是否保存数据提示

    一.通过窗体中的按钮实现退出时数据保存提示 Xaml: <Grid> <TextBlock HorizontalAlignment="Left" Margin=& ...

  7. Wpf 中的DataGrid的Header属性,动态bind时不起作用

    在使用wpf开发软件时,有使用到DataGrid,DataGridTextColumn的Header 属性使用DynamicResource binding,在修改绑定数据源时,header并没有更新 ...

  8. WPF中使用DataGrid时操作列按钮问题

    在使用DataGrid的过程中,我们有时候需要对选取的某一行数据进行多个操作,这个时候操作列只有一个按钮显然无法满足我们的要求,我们需要多个按钮才能达到我们的目的. UI页面代码: <Grid& ...

  9. (转帖)关于easyui中的datagrid在加载数据时候报错:无法获取属性"Length"的值,对象为null或未定义

    结贴说明: 很感谢sp1234等人的热心帮忙和提醒,现在我主要说明下问题所在: 首先我在独立的js文件中,直接把测试数据loaddata进去datagrid是没有问题的.var kk = {" ...

  10. WPF中修改DataGrid单元格值并保存

    编辑DataGrid中的单元格的内容然后保存是非常常用的功能.主要涉及到的方法就是DataGrid的CellEditEnding  和BeginningEdit .其中BeginningEdit 是当 ...

随机推荐

  1. taobao.tbk.sc.newuser.order.get( 淘宝客-服务商-新用户订单明细查询 )

    淘宝客订单表结构设计(mysql) CREATE TABLE `tbk_order` ( `id` bigint(20) NOT NULL AUTO_INCREMENT, `member_id` bi ...

  2. 前端实现HTML转PDF下载的两种方式

    原文链接:https://www.jianshu.com/p/56680ce1cc97 方式一:使用html2canvas和jspdf插件实现 该方式是通过html2canvas将HTML页面转换成图 ...

  3. 如何修改Mac文件默认打开方式?

    熟悉Mac电脑的用户都知道,在 OS X 中,Finder 存储的文件总会以指定的某个默认应用程序打开,比如图片类型的文件默认以「预览」打开.但由于经常需要使用图片编辑工具 PS打开图片类型的文件,每 ...

  4. leecode62不同路径(动态规划)

    一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为 "Start" ). 机器人每次只能向下或者向右移动一步.机器人试图达到网格的右下角(在下图中标记为 &quo ...

  5. CString常用方法简介

    CString常用方法简介 CString::Compare int Compare( LPCTSTR lpsz ) const; 返回值   字符串一样 返回0 小于lpsz  返回-1 大于lps ...

  6. Required request part 'file' is not present

    问题描述: @RequestMapping(value = "upload", method = RequestMethod.POST,consumes = MediaType.M ...

  7. MySQL经典45题

    一.数据库字段说明 1.学生表 Student(SId,Sname,Sage,Ssex)SId :学生编号Sname:学生姓名Sage :出生年月Ssex:学生性别 2.课程表 Course(CId, ...

  8. 波利亚(George Pólya)的一些链接

    忽然决定还是要写个博客. 第一篇献给波利亚. 他最有名的应该是<怎样解题>(How to solve it)这本书了.我认为只要读了前面几页就能提高普通人解决问题的能力,真的应该列为中学必 ...

  9. pycharm 导入requests库踩坑帖

    requests库确认安装了,但是在pycharm里各种导入不了,简直要奔溃,后来看帖子,有博主"alt + enter"了一下,跳出了install选项,然后就可以了... 用个 ...

  10. 通过ref调取子组件方法

    子 async update(res){ //this.$refs.child.animates(); this.userform = res; }, 主 <DetailEdit @detail ...