一個年輕的碼農的一個C#項目

    話很少少,今天要寫一個小項目。咱們寫項目要作好準備。咱們要作項目分析。要知道用戶需求,而後在根據需求來規劃本身的項目。咱們要用本身所學,作最好的程序。盡本身所能完成項目需求。精簡代碼!node

  咱們今天要寫的項目叫網絡電視精靈。首先咱們要作到的是要把咱們事先寫好的XML文件解析好放到TreeView空間上顯示。,並選擇一個Treeview的節點顯示其對應的信息到DateGridView上!網絡

 

  有幾個細節要求寫到再說!下面有彩蛋!!!ide

作好的窗體是這個樣子的!spa

啓動是這個樣子的 orm

全部的類是這個樣子的視頻

 

每一個類的代碼和註釋xml

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;
        }
//綁定TreeView的數據 public void Insert() { TreeNode minenode = new TreeNode(); minenode.Text = "個人電視臺"; //bind tvList.Nodes.Add(minenode); //根節點 TreeNode root = new TreeNode(); root.Text = "全部電視臺"; //bind tvList.Nodes.Add(root); ChannelManager manager = new ChannelManager(); manager.ResolveChannels(); List<ChannelBase> list = manager.List; foreach (ChannelBase item in list) { TreeNode tn = new TreeNode(); tn.Text = item.ChannelName; tn.Tag = item; root.Nodes.Add(tn); } } private void tvList_AfterSelect(object sender, TreeViewEventArgs e) { if(flag) {
//讓右鍵選擇菜單分開顯示 if (tvList.SelectedNode.Level == 0) { ctms.Items[0].Visible = false; ctms.Items[1].Visible = false; } else if (tvList.SelectedNode.Parent.Text == "個人電視臺") { ctms.Items[0].Visible = true; ctms.Items[1].Visible = false; } else if (tvList.SelectedNode.Parent.Text == "全部電視臺") { ctms.Items[0].Visible = false; ctms.Items[1].Visible = true; } TreeNode selectNode = tvList.SelectedNode; if (selectNode.Tag == null) { return; } ChannelBase channel = (ChannelBase)selectNode.Tag; //給LIst集合填充數據 channel.Fetch(); List<TvProgram> list = channel.ProgramList1; clear(list); } } public void clear(List<TvProgram> list) { dgvList.AutoGenerateColumns = false; dgvList.DataSource = new BindingList<TvProgram>(list); } private void dgvList_CellContentClick(object sender, DataGridViewCellEventArgs e) { } private void 加入個人電視臺ToolStripMenuItem_Click(object sender, EventArgs e) {
//右鍵加入個人電視臺 ChannelBase channel = (ChannelBase)tvList.SelectedNode.Tag; TreeNode node = new TreeNode(); node.Text = channel.ChannelName; node.Tag = channel; tvList.Nodes[0].Nodes.Add(node); } private void 刪除ToolStripMenuItem_Click(object sender, EventArgs e) { //刪除所選中的節點 XmlDocument doc = new XmlDocument(); doc.Load("FullChannels.xml"); //找根節點 () XmlNode root = doc.DocumentElement; foreach (XmlNode item in root.ChildNodes) { if (item["tvChannel"].InnerText == tvList.SelectedNode.Text) { tvList.SelectedNode.Remove(); break; } } } } }

  我是彩蛋!!! 對象

  全部代碼都在上面了,最後總結一下思路!咱們首先把電視頻道的XML文件解析到單列泛型集合裏,而後把集合的數據綁定到TreeView控件上並綁定Tag值爲ChannelBase對象;而後經過選中的節點的Tag值拿到電視節目解析完的泛型集合來綁定DateGridView!blog

相關文章
相關標籤/搜索