标签:
使用C#语言将磁盘上存放的保存频道和频道下对应的节目信息的xml文件通过TreeView控件和DataGridView控件展示出来并提供播放的功能。
我们知道:“在做一个新的项目之前需要对项目的架构进行搭建,也就是对项目进行详细的设计”
通过对需求的分析“保存的频道和频道下对应的节目信息”我们可以知道我们需要创建两个类-频道类(Channel)和节目类(Program)而他们的具体属性我们可以参考xml文档进行设计。
我们可以很明显的从xml文档中抽象出类的属性
每个频道下可以有多个节目信息
所以频道对象下还要有一个保存节目对象的集合
我们看到两个频道的xml文档的存储方式都不一样,这是怎么办呢?
我们可以结合两个xml文档抽象出齐全的属性
通过保存节目信息的xml文档路径在频道对象的path属性中保存我们可以在频道类中定义一个解析xml文档的方法。但是两个频道对应的xml文档的保存节目信息的方式并不一样,所以我们可以将Channel中定义抽象方法。并定义两个Channel的子类来对其方法进行重写。
而节目对象则需要有一个播放方法对其进行播放
进过我们的设计可以得到如下的类架构。当然后续也可以根据需求增加类。类图如下:
工厂类的作用就是根据程序运行时的需要创建出对应的频道对象
关键代码如下:
public static List<channels> Load() { List<channels> channels = new List<channels>(); XmlDocument channe = new XmlDocument(); channe.Load("fils\\FullChannels.xml"); XmlNode root = channe.DocumentElement; foreach (XmlNode item in root.ChildNodes) { channels cl=null; switch (item["channelType"].InnerText) { case "TypeA": cl = new TypeAChannel(); break; case "TypeB": cl = new TypeBChannel(); break; } cl.ChannelName = item["tvChannel"].InnerText; cl.Type = item["channelType"].InnerText; cl.Path = item["path"].InnerText; channels.Add(cl); } return channels; }
绑定TreeView就是将保存频道信息的xml文档解析出来保存在一个集合中,然后遍历整个集合将集合中的每一项转换为TreeView控件的节点对象再通过Nodes.Add()方法将节点对象添加到TreeView控件中。
首先将选择的TreeNode对象的Tag属性转化为Channel类型变量(频道对象保存在TreeNode节点的Tag属性中,Text属性保存的是频道名称),调用频道对象的解析节目信息xml的Load()方法给给频道对象的Programs结合变量赋值(programs中保存的是节目对象集合)。使用DataGridView的DataSource属性将频道对象的Programs集合绑定到DataGridView中显示。
public override void Load() { XmlDocument TypeA = new XmlDocument(); TypeA.Load(Path); XmlNode root = TypeA.DocumentElement; XmlNode tvTable = root["tvProgramTable"]; foreach (XmlNode item in tvTable.ChildNodes) { TvProgram program = new TvProgram(); program.PlayTime = item["playTime"].InnerText; program.Meridien = item["meridien"].InnerText; program.ProgramName = item["programName"].InnerText; program.Path = item["path"].InnerText; this.Programs.Add(program.PlayTime,program); } }
上述代码是解析北京电视台对应的xml文档,凤凰卫视的Load方法与此类似,这里不再附上代码!
标签:
原文地址:http://www.cnblogs.com/wangzheand/p/5254386.html