listView的增删,行单击事件,头部点击排序等功能

代码
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.Data;
using System.Xml;

namespace Databinding
{
/// <summary>
/// Window1.xaml 的交互逻辑
/// </summary>
public partial class Window1 : Window
{
//保存年龄,性别,姓名和他现在的排序
Dictionary<string, bool> Dall = new Dictionary<string, bool>();
public Window1()
{
InitializeComponent();
Dall.Add(
"year", true);
Dall.Add(
"sex", true);
Dall.Add(
"name", true);
databind();
}
//绑定listView
public void databind()
{
DataTable dtable
= dt("year", Dall["year"]);
listView1.ItemsSource
= dtable.DefaultView;
}
//获取xml里面的数据
public DataTable dt(string Column, bool sort)
{
XmlDocument xmlD
= new XmlDocument();
xmlD.Load(
"http://www.cnblogs.com/XMLData.xml");
XmlNode xmlN
= xmlD.SelectSingleNode("Persons");
XmlNodeList xmlNL
= xmlN.ChildNodes;
DataTable dtable
= new DataTable();
DataColumn[] DC
= new DataColumn[3];
DC[
0] = new DataColumn("name", typeof(string));
DC[
1] = new DataColumn("sex", typeof(string));
DC[
2] = new DataColumn("year", typeof(Int32));
dtable.Columns.AddRange(DC);
//循环读取数据并添加行到datatable
for (int row = 0; row < xmlNL.Count; row++)
{
XmlNode xnf
= xmlNL[row];
XmlNodeList xnf1
= xnf.ChildNodes;
DataRow dr
= dtable.NewRow();
for (int Count = 0; Count < xnf1.Count; Count++)
{
XmlNode xn2
= xnf1[Count];
dr[Count]
= xn2.InnerText;
}
dtable.Rows.Add(dr);
//添加行
}
if (sort)
dtable.DefaultView.Sort
= Column + " asc";
else
dtable.DefaultView.Sort
= Column + " desc";
//取相反值
Dall[Column] = !sort;
return dtable;
}
//添加一个节点
public void addXML(string name, string sex, int year)
{
XmlDocument xmlD
= new XmlDocument();
xmlD.Load(
"http://www.cnblogs.com/XMLData.xml");
XmlNode xmlN
= xmlD.SelectSingleNode("Persons");
XmlElement xmlE
= xmlD.CreateElement("Porson");
XmlElement xmlEname
= xmlD.CreateElement("name");
xmlEname.InnerText
= name;
xmlE.AppendChild(xmlEname);
XmlElement xmlEsex
= xmlD.CreateElement("sex");
xmlEsex.InnerText
= sex;
xmlE.AppendChild(xmlEsex);
XmlElement xmlEyear
= xmlD.CreateElement("year");
xmlEyear.InnerText
= year.ToString();
xmlE.AppendChild(xmlEyear);
xmlN.AppendChild(xmlE);
xmlD.Save(
"http://www.cnblogs.com/XMLData.xml");
}
//向xml里面添加数据
private void btnAdd_Click(object sender, RoutedEventArgs e)
{
if (txtYear.Text.Equals(""))
{
return;
}
addXML(txtName.Text, txtSex.Text, Convert.ToInt32(txtYear.Text.Trim()));
databind();
}
//点击头部排序
private void GridViewColumnHeader_Click(object sender, RoutedEventArgs e)
{
//获取点击头标题
GridViewColumnHeader headers = e.OriginalSource as GridViewColumnHeader;
string header = headers.Column.Header as string;
switch (header)
{
case "year":
listView1.ItemsSource
= dt("year", Dall["year"]).DefaultView;
break;
case "sex":
listView1.ItemsSource
= dt("sex", Dall["sex"]).DefaultView;
break;
case "name":
listView1.ItemsSource
= dt("name", Dall["name"]).DefaultView;
break;
default:
break;
}
}
//单击行时发生
private void listView1_SelectionChanged_1(object sender, SelectionChangedEventArgs e)
{
if (e.RoutedEvent.Name == "SelectionChanged")
{
try
{
//得到选择行数据并赋给txtbox
object[] aa = ((DataRowView)listView1.SelectedItem).Row.ItemArray;
button1.IsEnabled
= true;
txtName.Text
= aa[0].ToString();
txtSex.Text
= aa[1].ToString();
txtYear.Text
= aa[2].ToString();
}
catch (Exception)
{

}
}
}
//删除一个节点
private void button1_Click(object sender, RoutedEventArgs e)
{
XmlDocument xmlD
= new XmlDocument();
xmlD.Load(
"http://www.cnblogs.com/XMLData.xml");
XmlNode xmlN
= xmlD.SelectSingleNode("Persons");
XmlNodeList xmlNL
= xmlN.ChildNodes;
for (int k = 0; k < xmlNL.Count; k++)
{
XmlNodeList xmlNLI
= xmlNL[k].ChildNodes;
if (xmlNLI[0].InnerText == txtName.Text)
{
xmlN.RemoveChild(xmlNL[k]);
break;
}
}
xmlD.Save(
"http://www.cnblogs.com/XMLData.xml");
databind();
}
}
}

刚开始学WPF真不知道从哪里开始,就想着每次学什么东西好像都是先写个留言板,嘿嘿,今天就做了个操作XML数据,实现增删,及排序功能。由于是菜鸟所以代码很乱,只供自己以后查看。

代码
<?xml version="1.0" encoding="utf-8"?>
<Persons>
<Person>
<name>杨磊</name>
<sex></sex>
<year>22</year>
</Person>
<Person>
<name>XX</name>
<sex>MM</sex>
<year>10</year>
</Person>
<Person>
<name>YY</name>
<sex>GG</sex>
<year>34</year>
</Person>
<Person>
<name>RR</name>
<sex>GG</sex>
<year>55</year>
</Person>
<Person>
<name>WW</name>
<sex>MM</sex>
<year>18</year>
</Person>
<Porson>
<name>ry</name>
<sex>rtyu</sex>
<year>45</year>
</Porson>
</Persons>

可以优化的地方还望能提出来

原文地址:https://www.cnblogs.com/yangleiWPF/p/1688404.html