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(); } } }