项目结构:
ChannelBase类:
1 public abstract class ChannelBase 2 { 3 //频道名称 4 public string ChannelName { get; set; } 5 //频道路径 6 public string Path { get; set; } 7 //节目列表该频道上的所有节目列表 8 public List<TvProgram> TvList { get; set; } 9 //获取频道列表:通过Fetch方法获取该频道拥有的所有频道列表 10 public abstract void Fetch(); 11 }
ChannelManager类:
1 /// <summary> 2 /// 频道管理类 3 /// </summary> 4 public class ChannelManager 5 { 6 private List<ChannelBase> fullChannels = new List<ChannelBase>(); 7 public List<ChannelBase> FullChannels 8 { 9 get 10 { 11 return fullChannels; 12 } 13 set 14 { 15 fullChannels = value; 16 } 17 } 18 public void ReadXmlDataToList() 19 { 20 string path = "FullChannels.xml"; 21 XmlDocument doc = new XmlDocument(); 22 doc.Load(path); 23 XmlNode root = doc.DocumentElement; 24 foreach (XmlNode item in root.ChildNodes) 25 { 26 //一个item就代表一个Channel对象 27 string type = item["channelType"].InnerText; 28 ChannelBase channel = ChannelFactory.CreateChannel(type); 29 channel.ChannelName = item["tvChannel"].InnerText; 30 channel.Path = item["path"].InnerText; 31 fullChannels.Add(channel); 32 } 33 } 34 }
ChannelFactory类:
1 public class ChannelFactory 2 { 3 //通过工厂创建频道子类 4 public static ChannelBase CreateChannel(string type) 5 { 6 ChannelBase channel = null; 7 switch (type) 8 { 9 case "TypeA": 10 channel = new TypeAChannel(); 11 break; 12 case "TypeB": 13 channel = new TypeBChannel(); 14 break; 15 } 16 return channel; 17 } 18 }
TvProgram类:
1 //节目类 2 public class TvProgram 3 { 4 //播出时间 5 public DateTime PlayTime { get; set; } 6 //早间当,午间档,晚间档 7 public string ShiDuan { get; set; } 8 public string Name { get; set; } 9 //视频路径 10 public string Path { get; set; } 11 }
TypeAChannel类:
1 public class TypeAChannel:ChannelBase 2 { 3 public TypeAChannel() 4 { 5 TvList = new List<TvProgram>(); 6 } 7 public override void Fetch() 8 { 9 if (TvList==null) 10 { 11 TvList = new List<TvProgram>(); 12 } 13 XmlDocument doc = new XmlDocument(); 14 doc.Load(Path); 15 XmlNode root= doc.DocumentElement; 16 foreach (XmlNode item in root.ChildNodes) 17 { 18 if (item.Name.Equals("tvProgramTable")) 19 { 20 foreach (XmlNode child in item.ChildNodes) 21 { 22 TvProgram tv = new TvProgram(); 23 tv.PlayTime =Convert.ToDateTime(child["playTime"].InnerText); 24 tv.ShiDuan = child["meridien"].InnerText; 25 tv.Name = child["programName"].InnerText; 26 tv.Path = child["path"].InnerText; 27 TvList.Add(tv); 28 } 29 } 30 } 31 } 32 }
TypeBChannel类:
1 public class TypeBChannel:ChannelBase 2 { 3 public TypeBChannel() 4 { 5 TvList = new List<TvProgram>(); 6 } 7 public override void Fetch() 8 { 9 if (TvList == null) 10 { 11 TvList = new List<TvProgram>(); 12 } 13 XmlDocument doc = new XmlDocument(); 14 doc.Load(Path); 15 XmlNode root = doc.DocumentElement; 16 foreach (XmlNode item in root.ChildNodes) 17 { 18 if (item.Name.Equals("ProgramList")) 19 { 20 foreach (XmlNode child in item.ChildNodes) 21 { 22 TvProgram tv = new TvProgram(); 23 tv.PlayTime = Convert.ToDateTime(child["playTime"].InnerText); 24 tv.Name = child["name"].InnerText; 25 tv.Path = child["path"].InnerText; 26 TvList.Add(tv); 27 } 28 } 29 } 30 } 31 }
XML文件:
1 <?xml version="1.0" encoding="utf-8" ?> 2 <TVChannels> 3 <Channel> 4 <channelType>TypeA</channelType> <!--频道类型--> 5 <tvChannel>北京电视台</tvChannel> <!--频道名称--> 6 <path>北京电视台.xml</path> <!--频道对应XML文件的本地路径--> 7 </Channel> 8 <Channel> 9 <channelType>TypeB</channelType> 10 <tvChannel>凤凰卫视</tvChannel> 11 <path>凤凰卫视.xml</path> 12 </Channel> 13 </TVChannels> 14
1 <?xml version="1.0" encoding="utf-8" ?> 2 <typeA version =" 1.0"> 3 <channelName>北京电视台</channelName> 4 <tvProgramTable> 5 <tvProgram> 6 <playTime>2009-9-29 06:02</playTime> <!--节目播出时间--> 7 <meridien>早间档</meridien> <!--时段--> 8 9 <programName>重播:国际双行线</programName> <!--节目名称--> 10 <path>c:a.wma</path> <!--视频路径--> 11 </tvProgram> 12 <tvProgram> 13 <playTime>2009-9-29 07:00</playTime> <!--节目播出时间--> 14 <meridien>早间档</meridien> <!--时段--> 15 16 <programName>北京您早</programName> <!--节目名称--> 17 <path>C:New Stories (Highway Blues).wma</path> <!--视频路径--> 18 </tvProgram> 19 <tvProgram> 20 <playTime>2009-9-29 09:02</playTime> <!--节目播出时间--> 21 <meridien>早间档</meridien> <!--时段--> 22 23 <programName>重播《红星剧场》32集剧:勇者无敌(31)</programName> <!--节目名称--> 24 <path>**</path> <!--视频路径--> 25 </tvProgram> 26 <tvProgram> 27 <playTime>2009-9-29 09:58</playTime> 28 29 <meridien>早间档</meridien> 30 <programName>重播《红星剧场》32集剧:勇者无敌(32)</programName> 31 <path>**</path> 32 </tvProgram> 33 <tvProgram> 34 <playTime>2009-9-29 11:15</playTime> 35 36 <meridien>午间档</meridien> 37 <programName>重播:专题片:我爱你,中国(14)</programName> 38 <path>**</path> 39 </tvProgram> 40 <tvProgram> 41 <playTime>2009-9-29 11:58</playTime> 42 43 <meridien>午间档</meridien> 44 <programName>身边</programName> 45 <path>**</path> 46 </tvProgram> 47 <tvProgram> 48 <playTime>2009-9-29 12:30</playTime> 49 50 <meridien>午间档</meridien> 51 <programName>特别关注</programName> 52 <path>**</path> 53 </tvProgram> 54 <tvProgram> 55 <playTime>2009-9-29 13:05</playTime> 56 57 <meridien>午间档</meridien> 58 <programName>天下天天谈</programName> 59 <path>**</path> 60 </tvProgram> 61 <tvProgram> 62 <playTime>2009-9-29 13:40</playTime> 63 64 <meridien>午间档</meridien> 65 <programName>《玫瑰剧场》55集剧:闯关东中篇(21)</programName> 66 <path>**</path> 67 </tvProgram> 68 <tvProgram> 69 <playTime>2009-9-29 14:32</playTime> 70 71 <meridien>午间档</meridien> 72 <programName>《玫瑰剧场》55集剧:闯关东中篇(22)</programName> 73 <path>**</path> 74 </tvProgram> 75 <tvProgram> 76 <playTime>2009-9-29 15:27</playTime> 77 78 <meridien>下午档</meridien> 79 <programName>《玫瑰剧场》55集剧:闯关东中篇(23)</programName> 80 <path>**</path> 81 </tvProgram> 82 <tvProgram> 83 <playTime>2009-9-29 16:19</playTime> 84 85 <meridien>下午档</meridien> 86 <programName>《玫瑰剧场》55集剧:闯关东中篇(24)</programName> 87 <path>**</path> 88 </tvProgram> 89 <tvProgram> 90 <playTime>2009-9-29 17:31</playTime> 91 92 <meridien>下午档</meridien> 93 <programName>法治进行时</programName> 94 <path>**</path> 95 </tvProgram> 96 <tvProgram> 97 <playTime>2009-9-29 18:00</playTime> 98 99 <meridien>晚间档</meridien> 100 <programName>新闻晚高峰</programName> 101 <path>**</path> 102 </tvProgram> 103 <tvProgram> 104 <playTime>2009-9-29 18:30</playTime> 105 106 <meridien>晚间档</meridien> 107 <programName>北京新闻</programName> 108 <path>**</path> 109 </tvProgram> 110 <tvProgram> 111 <playTime>2009-9-29 18:56</playTime> 112 113 <meridien>晚间档</meridien> 114 <programName>天气预报</programName> 115 <path>**</path> 116 </tvProgram> 117 <tvProgram> 118 <playTime>2009-9-29 19:00</playTime> 119 120 <meridien>晚间档</meridien> 121 <programName>转播CCTV新闻联播</programName> 122 <path>**</path> 123 </tvProgram> 124 <tvProgram> 125 <playTime>2009-9-29 19:31</playTime> 126 127 <meridien>晚间档</meridien> 128 <programName>看气象</programName> 129 <path>**</path> 130 </tvProgram> 131 <tvProgram> 132 <playTime>2009-9-29 19:40</playTime> 133 134 <meridien>晚间档</meridien> 135 <programName>专题片:我爱你,中国(15)</programName> 136 <path>**</path> 137 </tvProgram> 138 <tvProgram> 139 <playTime>2009-9-29 20:22</playTime> 140 141 <meridien>晚间档</meridien> 142 <programName>《爸妈都是老党员》首播庆典</programName> 143 <path>**</path> 144 </tvProgram> 145 <tvProgram> 146 <playTime>2009-9-29 21:21</playTime> 147 148 <meridien>晚间档</meridien> 149 <programName>《红星剧场》38集剧:咱爸咱妈六十年(1)</programName> 150 <path>**</path> 151 </tvProgram> 152 <tvProgram> 153 <playTime>2009-9-29 23:25</playTime> 154 155 <meridien>晚间档</meridien> 156 <programName>重播文艺:花样年华歌舞大赛(5)</programName> 157 <path>**</path> 158 </tvProgram> 159 </tvProgramTable> 160 </typeA>
FrmMain主界面:
1 using System; 2 using System.Collections.Generic; 3 using System.ComponentModel; 4 using System.Data; 5 using System.Drawing; 6 using System.Linq; 7 using System.Text; 8 using System.Threading.Tasks; 9 using System.Windows.Forms; 10 11 namespace Day08_0600网络电视精灵 12 { 13 public partial class FrmMain : Form 14 { 15 public FrmMain() 16 { 17 InitializeComponent(); 18 } 19 20 private void Form1_Load(object sender, EventArgs e) 21 { 22 LoadparentNodes(); 23 LoadNodes(); 24 } 25 private TreeNode allNode = null; 26 private void LoadparentNodes() 27 { 28 TreeNode mynode = new TreeNode("我的电视台"); 29 allNode = new TreeNode("所有电视台"); 30 treeView1.Nodes.Add(mynode); 31 treeView1.Nodes.Add(allNode); 32 } 33 private void LoadNodes() 34 { 35 ChannelManager cm = new ChannelManager(); 36 cm.ReadXmlDataToList(); 37 foreach (ChannelBase item in cm.FullChannels) 38 { 39 TreeNode tr = new TreeNode(); 40 tr.Text = item.ChannelName; 41 tr.Tag = item; 42 allNode.Nodes.Add(tr); 43 } 44 45 } 46 47 private void treeView1_AfterSelect(object sender, TreeViewEventArgs e) 48 { 49 if (treeView1.SelectedNode.Level==0) 50 { 51 contextMenuStrip1.Items[1].Visible = false; 52 contextMenuStrip1.Items[0].Visible = false; 53 return; 54 } 55 else if(treeView1.SelectedNode.Parent.Text=="所有电视台") 56 { 57 contextMenuStrip1.Items[1].Visible = true; 58 contextMenuStrip1.Items[0].Visible = false; 59 } 60 else if(treeView1.SelectedNode.Parent.Text=="我的电视台") 61 { 62 contextMenuStrip1.Items[1].Visible = false; 63 contextMenuStrip1.Items[0].Visible = true; 64 } 65 if(treeView1.SelectedNode.Tag!=null){ 66 TreeNode treenode = treeView1.SelectedNode; 67 ChannelBase channel = (ChannelBase)treenode.Tag; 68 if (channel.TvList.Count>0) 69 { 70 channel.TvList.Clear(); 71 } 72 channel.Fetch(); 73 List<TvProgram> tvprogram = channel.TvList; 74 75 dataGridView1.DataSource = new BindingList<TvProgram>(tvprogram); 76 } 77 } 78 79 private void 删除ToolStripMenuItem_Click(object sender, EventArgs e) 80 { 81 TreeNode tr = treeView1.SelectedNode; 82 ChannelBase cbase=(ChannelBase)tr.Tag; 83 dataGridView1.DataSource = null; 84 tr.Remove(); 85 } 86 87 private void 添加ToolStripMenuItem_Click(object sender, EventArgs e) 88 { 89 TreeNode tre = treeView1.SelectedNode; 90 ChannelBase channe = (ChannelBase)tre.Tag; 91 TreeNode toe = new TreeNode(); 92 toe.Text = channe.ChannelName; 93 toe.Tag = channe; 94 treeView1.Nodes[0].Nodes.Add(toe); 95 } 96 97 } 98 }