WPF XML序列化保存数据 支持Datagrid 显示/编辑/添加/删除数据
XML序列化保存数据
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
using System.ComponentModel;
using System.Reflection;
using System.Xml.Serialization;
using System.IO; namespace TestWPFMsgItems
{
/// <summary>
/// Interaction logic for MsgListPanel.xaml
/// </summary>
public partial class MsgListPanel : UserControl
{
public MsgListPanel()
{
InitializeComponent();
msgFile = System.IO.Path.Combine("" + AppDomain.CurrentDomain.BaseDirectory, "mgs.d");
// addTestData();
loadMsgItems();
dataGridMsgList.DataContext = dataGridMsgList.ItemsSource = list; } public List<MsgItem> list = new List<MsgItem>();
private string msgFile = "";
private void btnDel_Click(object sender, RoutedEventArgs e)
{
var m = (sender as Button).DataContext as MsgItem;
list.Remove(m);
dataGridMsgList.ItemsSource = null;
dataGridMsgList.ItemsSource = list;
}
private void btnClose_Click(object sender, RoutedEventArgs e)
{ Save();
} void loadMsgItems()
{ dataGridMsgList.ItemsSource = null;
list = (List<MsgItem>)LoadFromXml(msgFile, list.GetType());
dataGridMsgList.ItemsSource = list;
}
object LoadFromXml(string filePath, Type type)
{
object result = null; if (File.Exists(filePath))
{
using (StreamReader reader = new StreamReader(filePath))
{
System.Xml.Serialization.XmlSerializer xmlSerializer = new System.Xml.Serialization.XmlSerializer(type);
result = xmlSerializer.Deserialize(reader);
}
}
return result;
}
void SaveToXml(string filePath, object sourceObj)
{
if (!string.IsNullOrWhiteSpace(filePath) && sourceObj != null)
{ using (StreamWriter writer = new StreamWriter(filePath))
{
System.Xml.Serialization.XmlSerializer xmlSerializer = new System.Xml.Serialization.XmlSerializer(sourceObj.GetType());
XmlSerializerNamespaces nameSpace = new XmlSerializerNamespaces(); nameSpace.Add("", ""); //not ot output the default namespace
xmlSerializer.Serialize(writer, sourceObj, nameSpace);
}
}
} void addTestData()
{ list = new List<MsgItem>(); for (int i = 1; i <= 2; i++)
{
list.Add(new MsgItem() { Age = 12, msg = "wgstrrrrrrrrrrrrrrrcd" });
list.Add(new MsgItem() { Age = 12, msg = "wgscd" });
list.Add(new MsgItem() { Age = 12, msg = "wgscd" }); } } public void Save()
{ SaveToXml(msgFile, list); } } //数据类
public class MsgItem : INotifyPropertyChanged
{ public event PropertyChangedEventHandler PropertyChanged;
private String _msg = "hello !!";
private int _age = 24; public String msg
{
set
{
_msg = value;
if (PropertyChanged != null)
{
PropertyChanged(this, new PropertyChangedEventArgs("msg"));
}
}
get
{
return _msg;
}
} public int Age
{
set
{
_age = value;
if (PropertyChanged != null)
{
PropertyChanged(this, new PropertyChangedEventArgs("Age"));//对Age进行监听
}
}
get
{
return _age;
}
} } }
界面UI 代码:
<UserControl x:Class="TestWPFMsgItems.MsgListPanel"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
mc:Ignorable="d"
d:DesignHeight="322" d:DesignWidth="700">
<Grid>
<DataGrid Name="dataGridMsgList" ItemsSource="{Binding}" AutoGenerateColumns="False" GridLinesVisibility="Horizontal" HorizontalGridLinesBrush="#FFEF7D7D" Margin="0,70,0,0" SelectionUnit="Cell">
<DataGrid.Columns>
<DataGridTextColumn Width="342" Header="ATH" Binding="{Binding msg}"/> <DataGridTemplateColumn Header="action" >
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<Button Margin="5" Click="btnDel_Click" Tag="777" Content="X delete" VerticalAlignment="Top" Cursor="Hand">
<Button.Template>
<ControlTemplate TargetType="Button">
<TextBlock TextDecorations="Underline">
<ContentPresenter />
</TextBlock>
</ControlTemplate>
</Button.Template>
<Button.Style>
<Style TargetType="Button">
<Setter Property="Foreground" Value="Blue" />
<Style.Triggers>
<Trigger Property="IsMouseOver" Value="true">
<Setter Property="Foreground" Value="Red" />
</Trigger>
</Style.Triggers>
</Style>
</Button.Style>
</Button>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn> </DataGrid.Columns>
</DataGrid> <Button Margin="5" Content="测试LinkButton" Width="123" VerticalAlignment="Top" Cursor="Hand">
<Button.Template>
<ControlTemplate TargetType="Button">
<TextBlock TextDecorations="Underline">
<ContentPresenter />
</TextBlock>
</ControlTemplate>
</Button.Template>
<Button.Style>
<Style TargetType="Button">
<Setter Property="Foreground" Value="Blue" />
<Style.Triggers>
<Trigger Property="IsMouseOver" Value="true">
<Setter Property="Foreground" Value="Red" />
</Trigger>
</Style.Triggers>
</Style>
</Button.Style>
</Button>
<Button Content="save" Height="23" HorizontalAlignment="Left" Margin="31,12,0,0" Name="btnClose" Click="btnClose_Click" VerticalAlignment="Top" Width="75" />
</Grid>
</UserControl>
WPF XML序列化保存数据 支持Datagrid 显示/编辑/添加/删除数据的更多相关文章
- 《ASP.NET1200例》在DataList里编辑和删除数据
学习内容:如何创建一个支持编辑和删除数据的DataList.增加编辑和删除功能需要在DataList的ItemTemplate和EditItemTemplate里增加合适的控件,创建对应的事件处理,读 ...
- SQL语句的使用,SELECT - 从数据库表中获取数据 UPDATE - 更新数据库表中的数据 DELETE - 从数据库表中删除数据 INSERT INTO - 向数据库表中插入数据
SQL DML 和 DDL 可以把 SQL 分为两个部分:数据操作语言 (DML) 和 数据定义语言 (DDL). SQL (结构化查询语言)是用于执行查询的语法. 但是 SQL 语言也包含用于更新. ...
- 数据表格 - DataGrid - 行编辑
行编辑一般用于单行数据的增删改,如果不用行编辑实现的话,对于表单数据量不大的情况,可以使用弹窗(Dialog),如果数据量比较大,也就是需要操作的数据比较多的时候,可以新开一个tab页. 新增/编辑 ...
- easyui datagrid 批量编辑和提交数据
easyui datagrid 行编辑和提交方,废话就不多说了,直接上代码 <div style="margin: 5px;"> <table id=" ...
- 使用Bootstrap + Vue.js实现 添加删除数据
界面首先需要引入bootstrap的css和bootstrap的js文件,还有vue.js和jQuery.js才可以看见效果. 这里提供bootstrap的在线文件给大家引用: <!-- 最新版 ...
- WPF下的Richtextbox中实现表格合并,添加删除行列等功能
.Net中已有现在的方法实现这些功能,不过可能是由于未完善,未把方法公开出来.只能用反射的方法去调用它. 详细信息可以查看.Net Framework 的源代码 http://referencesou ...
- 【Excle数据透透视表】如何删除数据透视表
选中区域A4:C17,在键盘上按DELETE键删除,结果提示: 那么如何删除呢? 解决方案 选中整个数透视表,再删除 具体操作: 选中整个数据透视表→DELETE 注意:删除之后,源数据不会受到影响
- Windowsphone 之xml序列化和反序列化的应用(WebService解析返回的数据DataSet )
关于Xml的序列化和反序列化: 可以看这篇文章,http://www.cnblogs.com/Windows-phone/p/3243575.html WebService解析返回的数据DataSet ...
- c# 使用 静态类+xml序列化 保存配置文件
namespace TVCorrectionDataProcess{ [XmlRoot(ElementName = "Config")] public class Co ...
随机推荐
- MBTIles实现
MBTIles实现 3.1 Compliant(符合) python: raster2mb (write) python: mbutil (read/write) python: landez (wr ...
- 配置方法数超过 64K 的应用
随着 Android 平台的持续成长,Android 应用的大小也在增加.当您的应用及其引用的库达到特定大小时,您会遇到构建错误,指明您的应用已达到 Android 应用构建架构的极限.早期版本的构建 ...
- js替换数组中字符串实例
这个是替换数组中的一个对象字符串: 直接上代码: var aaa=[ {"name":"张珊","sex":"man"} ...
- Hive分组取Top N
Hive在0.11.0版本开始加入了row_number.rank.dense_rank分析函数,可以查询分组排序后的top值 说明: row_number() over ([partition ...
- 安装并使用pt-ioprofile
pt-ioprofile,是一个percona的性能分析工具,可以查看进程输出.输入,打印一些表文件及活动IO.pt-ioprofile是一个只读工具,所以对数据没风险.由于网上对pt-ioprofi ...
- phpmyadmin 下载、安装、配置
phpmyadmin 下载.安装.配置 phpmyadmin 下载.安装.配置 地址:https://www.phpmyadmin.net/ 点击右上角下载按钮 下载得到phpMyAdmin-4.7. ...
- 参数innodb_force_recovery影响了整个InnoDB存储引擎的恢复状况
参数innodb_force_recovery影响了整个InnoDB存储引擎的恢复状况.该值默认为0,表示当需要恢复时执行所有的恢复操作.当不能进行有效恢复时,如数据页发生了corruption,My ...
- AD域创建用户无法登录
怎么登录都无法登录 解决办法: 创建用户的时候 将用户下次登录时须更改密码的勾去掉 不然需要修改密码才可以登录
- 转:.NET 面试题汇总(二)
目录 本次给大家介绍的是我收集以及自己个人保存一些.NET面试题第二篇 简介 1.接口 2.您在什么情况下会用到虚方法或抽象类,接口? 3.重载(Overload )和覆写(Override)的区别 ...
- ndk的注意事项
从开源网站下载的源码,需要自己编译c源码成so类库.当时用Android studio 运行总是报错"finished with non-zero exit value 2"报错定 ...