Newer
Older
GHFX_REFACTOR / FrmMetadataStat.cs
wxn on 2 Nov 2016 7 KB 提交
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms; 
using DevComponents.DotNetBar;
using System.Xml;
using System.Collections;
using System.Windows.Forms.DataVisualization.Charting;

namespace Cyberpipe
{
    public partial class FrmMetadataStat : Office2007Form
    {
        Dictionary<string, int> dic = new Dictionary<string, int>();  
        public FrmMetadataStat()
        {
            InitializeComponent();
        }
        //根据关键字查询
        private void searchBtn_Click(object sender, EventArgs e)
        {
            string sql = "select LAYERNAME from casic_metadataLayer where LAYERNAME like '%" 
                + keywordsTxt.Text.Trim() + "%'";
             DataTable table = OledbHelper.QueryTable(sql);
             int num = table.Rows.Count; 

             resultList.Clear();
             consLblC.Text = "";
             descLblC.Text = "";
             authorLblC.Text = "";
             ntLblC.Text = "";

             if (table != null && table.Rows.Count > 0)
             {
                 for (int i = 0; i < num;i++ )
                 {
                     resultList.Items.Add(table.Rows[i][0].ToString());
                 } 
             }
             this.resultLbl.Text = "共有"+num.ToString()+"个查询结果";

            //绘制图表
            drawChart();
        }
        //绘制图表
        private void drawChart() { 
            if (chart1.Series.Count > 0)
            {
                chart1.Series.Clear();
            }
            if (chart1.Legends.Count > 0)
            {
                chart1.Legends.Clear();
            } 
            int layernum  =  statistLayer();
            int metadataLayernum = statistMDLayer();
            int nomdLayernum = layernum - metadataLayernum;
            //MessageBox.Show("共有多少层?" + layernum.ToString()+"=="+metadataLayernum.ToString()+"=="+nomdLayernum.ToString());
            dic.Clear();
            dic.Add("已建",metadataLayernum);
            dic.Add("未建", nomdLayernum);

            chart1.Series.Add("图层");
            // Set axis title
            chart1.ChartAreas["ChartArea1"].AxisX.Title = "元数据图层";
            chart1.ChartAreas["ChartArea1"].AxisY.Title = "个数";

            chart1.Series["图层"].ChartType = SeriesChartType.Column;
            chart1.Series["图层"]["DrawingStyle"] = "Cylinder";
            chart1.Series["图层"].IsValueShownAsLabel = true;
             
            ArrayList xlist = new ArrayList();
            ArrayList ylist = new ArrayList();
             
            foreach (string key in dic.Keys)
            {
                if (dic[key] != 0)
                { 
                        xlist.Add(key);
                        ylist.Add(dic[key]);
                }
            }
            chart1.Series[0].Points.DataBindXY(xlist, ylist);

        }
        //统计有多少个有元数据的图层
        private int statistMDLayer(){
            int mdlayernum = 0;

            string sql = "select * from casic_metadataLayer";
            DataTable table = OledbHelper.QueryTable(sql);
            mdlayernum = table.Rows.Count;
             
            return mdlayernum;
        }
        //统计有多少个图层
        private int statistLayer() {
            int layernum = 0;

            string filename = Utility.filename;
            try
            {
                XmlDocument doc = new XmlDocument();
                doc.Load(filename);
                XmlNodeList Params1 = doc.SelectNodes("/Params/layers");

                foreach (XmlNode paramsNode in Params1) //layers
                {
                    foreach (XmlNode layerNode in paramsNode) //layer
                    {
                        //MessageBox.Show(layerNode.Attributes["label"].Value);

                        if (layerNode.HasChildNodes != false)
                        { 
                            foreach (XmlNode layerchildNode in layerNode) //layerchild
                            {
                                //MessageBox.Show(layerchildNode.Attributes["label"].Value);
                                if (layerchildNode.Name == "layerchild")
                                {
                                    layernum++;
                                }
                                else if (layerchildNode.Name == "layertype")
                                { 
                                    if (layerchildNode.HasChildNodes == true)
                                    {
                                        foreach (XmlNode childNodeLayer in layerchildNode)//layertype下的layerchild
                                        {
                                            //MessageBox.Show(childNodeLayer.Attributes["label"].Value);
                                            if (childNodeLayer.HasChildNodes == true)
                                            {
                                                 
                                                foreach (XmlNode n in childNodeLayer)
                                                {
                                                    layernum++;
                                                }
                                            }
                                            else
                                            {

                                                layernum++;
                                            }
                                        }
                                    }
                                }

                            }
                        } 
                    }

                }


            }
            catch (Exception ex)
            {
                LogError.PublishError(ex);
            }
            return layernum;
        }

        //选择list
        private void resultList_SelectedIndexChanged(object sender, EventArgs e)
        {
            //MessageBox.Show(resultList.SelectedItems[0].Text);
            string layer = resultList.SelectedItems[0].Text;
            searchLayerInfo(layer);
        }
        //查询元数据
        private void searchLayerInfo(String layername)
        {
            ////MessageBox.Show(layername);
            string sql = "select casic_metadatacontent.MDABSTRACT,casic_metadatacontent.MDDESCRIPTION,"
                + "casic_metadatacontent.MDAUTHOR,casic_metadatacontent.NT from casic_metadatacontent "
                + "join casic_metadatalayer on casic_metadatalayer.LAYERID = casic_metadatacontent.LAYERID "
                + "where casic_metadatalayer.LAYERNAME='" + layername + "'";
            DataTable table = OledbHelper.QueryTable(sql);
            int num = table.Rows.Count;
            //MessageBox.Show(num.ToString());
            if (table != null && table.Rows.Count > 0)
            { 
                consLblC.Text = table.Rows[0][0].ToString();
                descLblC.Text = table.Rows[0][1].ToString();
                authorLblC.Text = table.Rows[0][2].ToString();
                ntLblC.Text = table.Rows[0][3].ToString();
            }
            else
            { 
                MessageBox.Show("没有查到该图层的元数据!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
                this.consLblC.Text = "";
                this.descLblC.Text = "";
                this.authorLblC.Text = "";
                this.ntLblC.Text = "";
            }
        }

        private void buttonX1_Click(object sender, EventArgs e)
        {
            drawChart();
        }
    }
}