在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
话不多少,今天要写一个小项目。我们写项目要做好准备。我们要做项目分析。要知道用户需求,然后在根据需求来规划自己的项目。我们要用自己所学,做最好的程序。尽自己所能完成项目需求。精简代码! 我们今天要写的项目叫网络电视精灵。首先我们要做到的是要把我们事先写好的XML文件解析好放到TreeView空间上显示。,并选择一个Treeview的节点显示其对应的信息到DateGridView上!
有几个细节要求写到再说!下面有彩蛋!!! 做好的窗体是这个样子的! 启动是这个样子的 所有的类是这个样子的
每个类的代码和注释 using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace Chap_网络电视精灵 { /// <summary> /// 电视频道父类,抽象类 /// </summary> public abstract class ChannelBase { //这是一堆自动属性,很简单就是要来接收Xml文件的信息的! public string ChannelName { get; set; } public string Path { get; set; } public string ChannelType { get; set; } public List<TvProgram> list { get; set; } public abstract void Fetch(); //数据类型为List<TvProgram>的单列泛型集合 private List<TvProgram> ProgramList = new List<TvProgram>(); public List<TvProgram> ProgramList1 { get { return ProgramList; } set { ProgramList = value; } } } }
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace Chap_网络电视精灵 { public class ChannelFactory { /// <summary> /// 工厂类 /// </summary> /// <param name="type"></param> /// <returns></returns> public static ChannelBase CreateChannel(string type) { ChannelBase channel = null; switch(type) { case "TypeA": channel = new TypeAChannel(); break; case "TypeB": channel = new TypeBChannel(); break; default: break; } return channel; } } }
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Xml; namespace Chap_网络电视精灵 { /// <summary> /// 节目管理类 /// </summary> class ChannelManager { //单列泛型集合 private List<ChannelBase> list = new List<ChannelBase>(); public List<ChannelBase> List { get { return list; } set { list = value; } } //解析XML文件的方法 public void ResolveChannels() { //1.1 我将解析好的Data中转存放到泛型集合 //List<自定义类> XmlDocument doc = new XmlDocument(); doc.Load("FullChannels.xml"); //找根节点 XmlNode root = doc.DocumentElement; foreach (XmlNode item in root.ChildNodes) { //一个item代表什么 Channel ChannelBase channel = Factory.CreateFactory(item["channelType"].InnerText); channel.ChannelType = item["channelType"].InnerText; channel.ChannelName = item["tvChannel"].InnerText; channel.Path = item["path"].InnerText; //归属到一个集合中 list.Add(channel); } } } }
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace Chap_网络电视精灵 { /// <summary> /// 简单工厂类 /// </summary> class Factory { //一个静态的返回值为ChannelBase类型的方法 public static ChannelBase CreateFactory(string type) { ChannelBase types = null; switch (type) { case "TypeA": types = new TypeAChannel(); break; case "TypeB": types = new TypeBChannel(); break; } return types; } } }
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace Chap_网络电视精灵 { /// <summary> /// 电视频道类 /// </summary> public class TvProgram { //节目名称 public string ProgramName { get; set; } //时段 public string Meridien { get; set; } //节目路径 public string Path { get; set; } //时间 public DateTime PlayTime { get; set; } } }
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Xml; namespace Chap_网络电视精灵 { /// <summary> /// A类频道类 /// </summary> class TypeAChannel : ChannelBase { //重写父类的抽象方法,解析XML文件并绑定到泛型集合上 public override void Fetch() { XmlDocument doc = new XmlDocument(); doc.Load("北京电视台.xml"); XmlNode root = doc.DocumentElement; //找根节点 foreach (XmlNode item in root.ChildNodes)//遍历子节点 { if(item.Name.Equals("tvProgramTable"))//判断条件是节点的Name是否是"tvProgramTable" { foreach (XmlNode items in item.ChildNodes)//遍历子节点的子节点 { TvProgram Tp = new TvProgram(); Tp.PlayTime = Convert.ToDateTime(items["playTime"].InnerText); Tp.Meridien = items["meridien"].InnerText; Tp.Path = items["path"].InnerText; Tp.ProgramName = items["programName"].InnerText; ProgramList1.Add(Tp);//绑定到集合 } } } } } }
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Xml; namespace Chap_网络电视精灵 { class TypeBChannel : ChannelBase { //解析XML文件的方法 public override void Fetch() { //1.1 我将解析好的Data中转存放到泛型集合 //List<自定义类> XmlDocument doc = new XmlDocument(); doc.Load("凤凰卫视.xml"); //找根节点 XmlNode root = doc.DocumentElement; foreach (XmlNode item in root.ChildNodes)//遍历子节点 { if (item.Name.Equals("ProgramList"))//判断条件是节点的Name是否是"tvProgramTable" { foreach (XmlNode items in item.ChildNodes)//遍历子节点的子节点 { TvProgram Tp = new TvProgram(); Tp.PlayTime = Convert.ToDateTime(items["playTime"].InnerText); Tp.Path = items["path"].InnerText; Tp.ProgramName = items["name"].InnerText; ProgramList1.Add(Tp);//绑定到集合 } } } } } }
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; using System.Xml; namespace Chap_网络电视精灵 { public partial class FrmMain : Form { public FrmMain() { InitializeComponent(); } bool flag = false; private void FrmMain_Load(object sender, EventArgs e) { Insert(); flag = true; } 我是彩蛋!!! 所有代码都在上面了,最后总结一下思路!我们首先把电视频道的XML文件解析到单列泛型集合里,然后把集合的数据绑定到TreeView控件上并绑定Tag值为ChannelBase对象;然后通过选中的节点的Tag值拿到电视节目解析完的泛型集合来绑定DateGridView!
|
2023-10-27
2022-08-15
2022-08-17
2022-09-23
2022-08-13
请发表评论