WPF中的DataGrid支持Excell粘贴数据
其中XMAL文件中的表格样式:
使用MVVM模式下的双向绑定,红色部分需要注意
后台代码如下:
///
/// 粘贴处理剪贴板
///
///
///
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
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
//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");
}
}
}
}