• XML完成小程序


    XML文档的格式如下:

    <?xml version="1.0" encoding="utf-8"?>

    <学生名单>

    <学生 Name="李四一" class="0102">

    <性别>男</性别>

    <生日>1999年1月2日</生日>

    <学号>20170</学号>

    </学生>

    <学生 Name="张三三"  class="高一">

    <性别>男</性别>

    <学号>0102</学号>

    <生日>2017年6月18日</生日>

    </学生>

    </学生名单>

    数据在DateGridView中的显示

    将XML中的数据,顺序显示在DataGridView控件中

    //创建一个datatable存储XML中的数据

    DataTable dt=new DataTable();

    //指定每一列的列名,和数据类型

    dt.Columns.Add("Id",(typeof(System.String)));

    dt.Columns.Add("班级",(typeof(System.String)));

    dt.Columns.Add("姓名",(typeof(System.Strng)));

    dt.Columns.Add("学号".(typeof(Sytem.String)));

    dt.Columns.Add("生日".(typeof(System.String)));

    dt.Columns.Add("性别".(typeof(System.String)));

    //创建一个DataRow对象

    DataRow dr=dt.NewRow();

    XmlDocument doc=new XmlDocument();

    //为相对路径表示前二级的目录

    doc.Load(@"..//..//Students.xml");

    XmlElement root=doc.DocumentElenment;

    XmlNodeList studentNodes=root.GetElementsByTagName("学生");

    //使用foreach遍历集合元素

    foreach(var item in studentNodes)

    {

    dr["Id"]=((XmlElement)item).GetAttribute("Id");

    dr["班级"]=((XmlElement)item).GetAttribute("Class");

    dr["姓名"]=((XmlElement)item).GetAttribute("Name");

    dr["学号"]=((XmlElement)item).GetElementsByTagName("学号")[0].InnerText;

    dr["生日"]=((XmlElement)item).GetElementsByTagName("生日")[0].InnerText;

    dr["性别"]=((XmlElement)item).GetElementsByTagName("性别")[0].InnerText;

    dt.Rows.Add(dr);

    }

    //将DataTable绑定到DataGridView控件

    dgvStudents.DataSource=dt;

    增加记录

    因为添加学生和编辑学生都需要在同一个窗体,那么在打开添加或编辑窗体时使用构造函数来传值,并判断是编辑还是添加

    添加编辑窗体代码:

        public partial class FrmStudentAddandEdit:Form

    {

    //全局变量接受传值

    bool IsAdd;

    string Name;

    //使用构造函数进行传值true为增加,FALSE为编辑

    public FrmStudentAddandEdit(bool isAdd,string name)

    {

    this.IsAdd=isAdd;

    this.Name=name;

    InitializeComponent();

    }

    }

    主窗体添加按钮单击事件代码:

    private void btnAdd_Click(object sender,EventArgs e)

    {

    //在创建窗体时传值

    FrmStudentAddandEdit form=new FrmStudentAddandEdit(true)'

    form.ShowDialog();

    }

    新增记录代码:

    private void btnOK_Click(object sender,EventArgs e)

    {

      XmlDocument doc=new XmlDocument();

     doc.Load(@"..//..//Students.xml");

    XmlElement root=doc.DocumentElement;

    //添加《学生》子节点

    XmlElement Shutdent=doc.CreateElement("学生");

    //设置Name属性和Class属性

    Shutdent.SetAttribute("Name",txtName.Text.Trim());

    Shutdent.SetAttribute("Class",txtClass.Text.Trim());

    //创建子节点

    XmlElement eSex=doc.CreateElement("性别");

    XmlText tSex=doc.CreateTextNode(cmbSex.Text.Trim());

    //子节点添加内容

    eSex.AppendChild(tSex);

    //将子节点添加学生标记

    Shutdent.AppendChild(eSex);

    XmlElement eNum=doc.CreateElement("学号");

    XmlText tNum=doc.CreateTextNode(txtNumber.Text.Trim());

    eNum.AppendChild(tNum);

    Shutdent.AppendChild(eNum);

    XmlElement eBirthday=doc.CreateElement("生日");

    XmlText tBirthday=doc.CreateTextNode(dtpBirthday.Text.Trim('-'));

    eBirthday.AppendChild(tBirthday);

    Shutdent.AppendChild(eBirthday);

    //将学生标记添加进根结点

    root.AppendChild(Shutdent);

    doc.Save(@"..//..//Students.xml");

    MessageBox.Show("添加成功!");

    this.Close();

    }

     编辑记录

    由于编辑需要查找到这条记录然后复制到控件中显示,那么在我们启动“添加或编辑窗体”时需要判断当前是添加状态还是编辑状态,并将表格选择行的姓名字段传给构造函数,通过这个姓名字段查找相应的值,然后筛选出来再给控件赋值

    主窗口编辑按钮单击事件:

    private void btnEdit_Click(object sender,EventArgs e)

    {

    //获取当前选择表格的行索引

    int dgvIndex=dgvStudents.CurrentRow.Index;

    //根据行索引获取单元格的值

    string name=dgvStudents.Rows[dgvIndex].Cells["姓名"].Value.ToString();

    FrmStudentAddandEdit form=new FrmStudentAddandEdit(false,name);

    form.ShowDialog();

    }

    窗体启动事件进行判断是添加还是编辑:

    private void FrmStudentAddandEdit_Load(object sender,EventArgs e)

    {

    if(IsAdd){

    this.Text="添加学生”;

    }

    else

    {

    this.Text="编辑学生名单";

    XmlDocument doc=new XmlDocument();

    doc.Load(@"..//..//Students.xml");

    XmlElement root=doc.DocumentElement;

    //筛选出符合条件的标记

    XmlElement selectEle=(XmlElement)root.SelectSingleNode("/学生名单/学生[@Name='"+Name+"']");

    //筛选出符合条件并给控件赋值

    txtName.Text=selectEle.GetAttribute("Name");

    txtClass.Text=selectEle.GetAttribute("Class");

    txtNumber.Tex=selectEle.GetElementsByTagName("学号“)[0].InnerText;

    dtpBirthday.Text=selectEle.GetElemensByTagName("生日")[0].InnerTextl;

    cmbSex.Text=selectEle.GetElementsByTagName("性别")[0].InnerText;

    }

    }

    同样在编辑好内容后,单击确定按钮后判断当前是添加状态还是编辑状态:

    private void btnOK_Click(object sender,EventArgs e)

    {

    if(IsAdd)

    {

    //添加记录代码

    }

    else

    {

    this.Text="编辑学生名单";

    XmlDocument doc=new XmlDocument();

    doc.Load(@"..//..//Students.xml");

    XmlElement root=doc.DocumentElement;

    //筛选出符合条件的标记

    XmlElement selectEle=(XmlElement)root.SelectSingleNode("/学生名单/学生[@Name='"+Name+"']");

    selectEle.SetAttribute("Name",txtName.Text.Trim());

    selectEle.SetAttribute("Class",txtClass.Text.Trim());

    //筛选出的对象赋给XMLElement对象

    XmlElement eSex=(XmlElement)selectEle.GetElementsByTagName("性别")[0];

    eSex.InnerText=cmbSex.Text;

    XmlElement eNumber=(XmlElement)selectEle.GetElementsByTagName("学号")[0];

    eNumber.InnerText=txtNumber.Text;

    XmlElement eBirth=(XmlElement)selectEle.GetElementsByTagName("生日")[0];

    eBirth.InnerText=dtpBirthday.Text;

    doc.Save(@"..//..//Students.xml");

    MessageBox.Show("修改成功!");

    //这一步很重要一定要关闭窗口不然再次修改会出现不可预料的BUG

    this.Close();

    }

    }

    删除记录

    也是一样的逻辑获取当前选择表格的姓名字段,然后按照相关姓名进行删除,如果姓名不是唯一字段,那么可以使用ID,每次添加一次记录的时候最大ID+1

    //获取当前选择表格的行索引及姓名

    int dgvIndex=dgvStudents.CurrentRow.Index;

    string name=dgvStudents.Rows[dgvIndex].Cells["姓名"].Value.ToString();

    //筛选出符合条件的标记

    XmlElement selectEle=(XmlElement)root.SelectSingleNode("/学生名单/学生[@Name='"+Name+"']";

    //删除指定子元素

    root.RemoveChild(selectEle);

    doc.Save("...");

  • 相关阅读:
    转载集合
    TYVJ P1053 字符串的展开 Label:字符 水
    划分数系列问题
    关于inf的问题
    TYVJ P1031 热浪 Label:dijkstra 最短路
    TYVJ P1032 零用钱 Label:贪心
    如何简单形象又有趣地讲解神经网络是什么?知乎
    CString
    利用afxDump来调试自己的程序
    mfc 调试 弹消息
  • 原文地址:https://www.cnblogs.com/zzp0320/p/7048828.html
Copyright © 2020-2023  润新知