zoukankan      html  css  js  c++  java
  • 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>

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

  • 相关阅读:
    【BZOJ1345】[Baltic2007] 序列问题(单调栈大水题)
    【BZOJ2940】[POI2000] 条纹(Multi-SG)
    【BZOJ4589】Hard Nim(FWT+快速幂)
    【CF438E】The Child and Binary Tree(生成函数+多项式开根)
    【洛谷5205】【模板】多项式开根
    【BZOJ4036】[HAOI2015] 按位或(Min-Max容斥+FWT)
    【BZOJ4381】[POI2015] ODW(设阈值+倍增)
    【BZOJ3328】PYXFIB(矩乘+单位根反演)
    【BZOJ2674】Attack(整体二分+树状数组套线段树)
    单纯看懂公式的单位根反演
  • 原文地址:https://www.cnblogs.com/yangleiWPF/p/1688404.html
Copyright © 2011-2022 走看看