Esempio n. 1
0
        //
        public void ReLoadTree()
        {
            treeView1.Nodes.Clear();
            //转换成实体类,把数据放在Tag中这样会方便些。
            List<NavUrl> NavUrls = new List<NavUrl>();
            var q = from p in mf.DS.NavUrl.AsEnumerable()
                    select p;
            foreach (YQDataSet.NavUrlRow kind in q)
            {
                NavUrl nu = new NavUrl();
                nu.ID = (int)kind.ID;
                nu.Name = kind.Name;
                nu.Nav_Domain = kind.Nav_Domain;
                nu.PID = (int)kind.PID;
                nu.Code = kind.Code;
                nu.Level = (int)kind.level;
                nu.Leaf = kind.Leaf;
                nu.Link = kind.Link;
                nu.Image = (int)kind.Image;
                nu.ItemCount = (int)kind.ItemCount;
                nu.NoReadCount = (int)kind.NoReadCount;
                NavUrls.Add(nu);
            }

            List<TreeNode> LT = GetTreeNodes(NavUrls);
            foreach (TreeNode tn in LT)
            {
                treeView1.Nodes.Add(tn);
            }
        }
Esempio n. 2
0
 //子层的递归
 private void FindChildNode(TreeNode tnParent, NavUrl u, List<NavUrl> NavUrls)
 {
     foreach (NavUrl n in NavUrls)
     {
         if (n.PID == u.ID)
         {
             TreeNode tn = new TreeNode();
             tn.Text = n.Name;
             tn.ImageIndex = tn.SelectedImageIndex = n.Image;
             tn.Tag = n;
             //2、递归子层;
             FindChildNode(tn, n, NavUrls);
             tnParent.Nodes.Add(tn);
         }
     }
 }
Esempio n. 3
0
        public static IHtmlString ActiveIfCurrent(this WebViewPage page, NavUrl navUrl)
        {
            var    request        = page.Request;
            string areaName       = (string)request.RequestContext.RouteData.DataTokens["area"] ?? "";
            string controllerName = (string)request.RequestContext.RouteData.Values["controller"] ?? "";
            string actionName     = (string)request.RequestContext.RouteData.Values["action"] ?? "";

            var isTypeOk = true;

            if (navUrl.Type != null && navUrl.Type.Trim().Length > 0)
            {
                string type = request.Params[NavUrl.TypeParam] ?? "";
                isTypeOk = navUrl.Type == type;
            }

            if (navUrl.Area == areaName && navUrl.Controller == controllerName && navUrl.Action == actionName && isTypeOk)
            {
                return(page.Html.Raw("class=\"active\""));
            }
            return(page.Html.Raw(""));
        }
Esempio n. 4
0
 public static string GenerateUrl(this WebViewPage page, NavUrl navUrl)
 {
     return(page.Url.Action(navUrl.Action, navUrl.Controller, navUrl.RouteValues));
 }
Esempio n. 5
0
        //增加子级节点,该新子级节点的数据
        private void ShowSubJ(NavUrl nu)
        {
            /*
             * 需要做的:
             * 1、层级+1,不大于3.
             * 2、PID等于自己IDave
             * 3、Level〈3为F,否则为T
             * 4、计算Code值
             *
             * 上面已经禁了是层级为3的项。所以只能判断为2和4项了。
             */
            txtFatherID.Text = nu.ID.ToString();
            nudLevel.Value = nu.Level + 1;

            //计算Code的值
            var qcode = from p in mf.DS.NavUrl.AsEnumerable()
                        where p.Code.StartsWith(nu.Code) && p.level == nu.Level + 1
                        select p;
            List<int> num = new List<int>();
            foreach (var item in qcode)
            {
                num.Add(Int32.Parse(item.Code));
            }
            if (num.Count == 0)//没有记录时。
            {
                txtThisCode.Text = nu.Code + "01";
            }
            else
            {

                if (num.Max() < 9)//小于9的,只有一位;
                {
                    txtThisCode.Text = nu.Code + "0" + (num.Max() + 1).ToString();
                }
                else
                {
                    txtThisCode.Text = (num.Max() + 1).ToString();
                }
            }

            switch (nu.Code.Length)
            {
                case 2://此处节点为2级的
                    txtLeaf.Text = nu.Leaf;
                    txtDomain.Enabled = false;
                    txtThisUrl.Enabled = false;
                    break;
                case 4://此处节点为3级的,即信RSS地址的
                    txtLeaf.Text = "T";
                    txtDomain.Enabled = true;
                    txtThisUrl.Enabled = true;

                    break;
                case 6:  //此处为不能增加子节点了。否则会很多层级。
                    break;
                default:
                    break;
            }
        }
Esempio n. 6
0
        //增加同级节点,新节点的数据
        private void ShowSameJ(NavUrl nu)
        {
            lvImageList.Items[nu.Image].Selected = true;
            foreach (ListViewItem item in lvImageList.Items)
            {
                if (item.Selected == true)
                {
                    item.BackColor = Color.Blue;
                }
                else
                {
                    item.BackColor = Color.White;
                }
            }

            //以下四种需要计算
            txtFatherID.Text = nu.PID.ToString();
            nudLevel.Value = (int)nu.Level;
            txtLeaf.Text = nu.Leaf;
            //需要计算  默认为同级节点
            txtThisCode.Text = ShowCode(nu.Code, nu.Level);
        }
Esempio n. 7
0
        //单选按键变化时
        private void radioButton_Click(object sender, EventArgs e)
        {
            int id = Int32.Parse(labJID.Text);
            YQDataSet.NavUrlRow nur = mf.DS.NavUrl.FindByID(id);
            NavUrl nu = new NavUrl();
            nu.ID = nur.ID;
            nu.PID = nur.PID;
            nu.Code = nur.Code;
            nu.Level = nur.level;
            nu.Leaf = nur.Leaf;
            nu.Image = nur.Image;

            if (rabTJ.Checked == true)//增加同级
            {
                ShowSameJ(nu);//显示同级
            }
            else  //增加子级节点  主是新大分类中的子分类
            {
                ShowSubJ(nu);
            }
        }
Esempio n. 8
0
        private void Nomal_GetRssXml(NavUrl navurl)
        {
            try
            {
                //加载RSS新闻数据
                XElement rssData = XElement.Load(navurl.Link);
                var itemQuery = from item in rssData.Descendants(XName.Get("item"))
                                select new
                                {
                                    Title = item.Element(XName.Get("title")).Value.Trim(),
                                    Link = item.Element(XName.Get("link")).Value,
                                    PubDate = item.Element(XName.Get("pubDate")).Value
                                };
                foreach (var result in itemQuery)
                {
                    //为百度源CDATA标签设置过滤
                    //通过Link查找DataSet中是否有相同的网址
                    //查询RssItem表中,与这个频道相同的项中,是否有相同的网址,如果有不采集  加上网站去重,用title
                    int f = (from p in mf.DS.RssItem.AsEnumerable() where (p.Link == result.Link || p.Title == result.Title) select p).ToList().Count;

                    /*在DataSet中设置了新境时自动增加ID值,AtuoIncremnet 为true;
                     *设置Link列为Unique唯一索引。通过该值查找对应的ItemRssm.
                    */
                    if (f == 0)
                    {
                        //这里过渡日期
                        if (Convert.ToDateTime(result.PubDate) > (DateTime.Now.AddDays(-7)))
                        {

                            //先在DS中加入一行,
                            mf.DS.RssItem.AddRssItemRow(navurl.Name, navurl.Code, result.Title.Trim(), result.Link, result.PubDate, "F", "");
                            //既然是新增的找ID困难,那么我们就只专心做上面的一件事,其它的:比如显示呀,多线程采集内容呀,下一步再说。现在测试

                        }
                    }
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.ToString());
            }
        }
Esempio n. 9
0
 //子层的递归
 private void FindChildNode(TreeNode tnParent, NavUrl u, List<NavUrl> NavUrls)
 {
     foreach (NavUrl n in NavUrls)
     {
         if (n.PID == u.ID)
         {
             TreeNode tn = new TreeNode();
             //实现了信息条目的显示。
             tn.Text = n.Name + "(" + n.NoReadCount.ToString() + "/" + n.ItemCount.ToString() + ")";
             tn.ImageIndex = tn.SelectedImageIndex = n.Image;
             tn.Tag = n;
             //2、递归子层;
             FindChildNode(tn, n, NavUrls);
             tnParent.Nodes.Add(tn);
         }
     }
 }
Esempio n. 10
0
        private void DownRss_XinHa(NavUrl navurl)
        {
            try
            {
                //加载RSS新闻数据
                XElement rssData = XElement.Load(navurl.Link);
                //取出新闻标题,转成RssItem对象,并暂存到列表控件中

                //看来只能用正规截取了!
                //<link>http://news.xinhuanet.com/shuhua/2013-11/16/c_125712954.htm</link>
                //Sat,16-Nov-2013 11:33:12 GMT
                //<description>
                Regex regex = new Regex(@"(?<=<\/link>)(.*?)(?=<description>)");
                //想到的办法:一是通过xelement对象,正规取得;二是在源码中加入pubDate标签。
                //取出新闻标题,转成RssItem对象,并暂存到列表控件中
                #region test
                //var i = rssData.Descendants(XName.Get("item")).First();
                //MessageBox.Show(i.ToString());//保留了xelement格式。
                //去除标题的a标签。
                Regex regTitle = new Regex(@"</?.+?>");
                //去除连接中的双引号
                //string s="\"http://news.xinhuanet.com/edu/2013-10/11/c_125515383.htm\"";
                //MessageBox.Show(s.Replace("\"", ""));
                #endregion
                var itemQuery = from item in rssData.Descendants(XName.Get("item"))
                                select new
                                {
                                    Title = regTitle.Replace(item.Element(XName.Get("title")).Value.Trim(), ""),
                                    Link = item.Element(XName.Get("link")).Value.Replace("\"", ""),
                                    PubDate = regex.Match(item.ToString()).ToString()
                                    //PubDate = item.Element(XName.Get("pubDate")).Value

                                };

                //用于标记本次新采集了多少条。

                foreach (var result in itemQuery)
                {

                    //通过Link查找DataSet中是否有相同的网址
                    //查询RssItem表中,与这个频道相同的项中,是否有相同的网址,如果有不采集  加上网站去重,用title
                    int f = (from p in mf.DS.RssItem.AsEnumerable() where (p.Link == result.Link || p.Title == result.Title) select p).ToList().Count;
                    if (f == 0)
                    {
                        //方法二:在DataSet中添加行,然后一次提交到库
                        mf.DS.RssItem.AddRssItemRow(navurl.Name, navurl.Code, result.Title.Trim(), result.Link, result.PubDate, "F", "");
                    }
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.ToString());
            }
        }
Esempio n. 11
0
        private void DownRss_Sina(NavUrl navurl)
        {
            //加载RSS新闻数据
            XElement rssData = XElement.Load(navurl.Link);
            Regex regex = new Regex(@"(?<=[=]).*");
            //http://go.rss.sina.com.cn/redirect.php?url=http://tech.sina.com.cn/it/2013-11-16/09198919884.shtml

            //取出新闻标题,转成RssItem对象,并暂存到列表控件中
            var itemQuery = from item in rssData.Descendants(XName.Get("item"))
                            select new
                            {
                                Title = item.Element(XName.Get("title")).Value.Trim(),
                                Link = regex.Match(item.Element(XName.Get("link")).Value).ToString(),
                                PubDate = item.Element(XName.Get("pubDate")).Value
                            };

            foreach (var result in itemQuery)
            {
                //查询RssItem表中,与这个频道相同的项中,是否有相同的网址,如果有不采集  加上网站去重,用title
                int f = (from p in mf.DS.RssItem.AsEnumerable() where (p.Link == result.Link || p.Title == result.Title) select p).ToList().Count;
                if (f == 0)
                {
                    //这里过滤日期
                    if (Convert.ToDateTime(result.PubDate) > (DateTime.Now.AddDays(-7)))
                    {
                        mf.DS.RssItem.AddRssItemRow(navurl.Name, navurl.Code, result.Title.Trim(), result.Link, result.PubDate, "F", "");
                    }
                }
            }
        }
Esempio n. 12
0
        private void DownLoadRssItem(NavUrl navurl)
        {
            /*
             * 采集分有RSS采集,等8类。Rss采集只是其中一类。
             * Rss采集中《新华网》采规则又有不同,需要单独取出。
             * 标记一下,是不是有新的项采了进来。如果没有就不用统计和更新。!!!
             * 采集到的东西,如果时间太长了。大于1周前的内容,干脆就过虑掉。!!!
             */
            switch (navurl.Code.Substring(0, 2))//取出大项分类01-08,
            {
                case "01"://此项为Rss采集
                    switch (navurl.Code.Substring(0, 4))//判断特殊规则,如新华网
                    {
                        //case "0102"://新浪网
                        //    DownRss_Sina(navurl);
                        //    break;
                        case "0108"://新闻网
                            DownRss_XinHa(navurl);
                            break;

                        default://正常内容rss2.0 //百度新闻订阅中包含CDATA,不管是哪种DOM解析,cdata都是透明的,也就是完全可以当做cdata不存在来解析,
                            Nomal_GetRssXml(navurl);
                            //DownloadRSS(navurl);
                            break;
                    }
                    break;
                case "02"://网站新闻
                    break;
                case "03"://论坛
                    break;
                case "04"://博客
                    break;
                case "05"://微博
                    break;
                case "06"://微信
                    break;
                case "07"://客户端
                    break;
                case "08"://外网
                    break;

            }

            mf.SaveRssItemToDB(mf.DS.RssItem);
            //更新总数  不要在这里作了。容易出错
        }