Newer
Older
EMS_SZ / FrmFlagManagers.cs
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 GeoScene.Globe;
using GeoScene.Data;
using GeoScene.Engine;
using System.IO;
using System.Reflection;
using System.Data.OracleClient;
using WHC.Pager.WinControl;
using System.Threading;
using System.Runtime.InteropServices;

namespace Cyberpipe
{
    public partial class FrmFlagManagers : Office2007Form
    {
        GSOGlobeControl globeControl1 = null;
        int maxPageIndex = 20;
        public static bool IS_OPEN = false;
        int rows = 0;
        public static GeoScene.Engine.GSODataSource ds = null;
        TreeNode layerManagerNode = null;
        string LSSYS_ID_VALUE = "标识器自增编号";//LSSYS_ID的显示名称,改动唯一入口,不能含有空格等符号
        public FrmFlagManagers(GSOGlobeControl _globeControl1)
        {
            this.globeControl1 = _globeControl1;
            InitializeComponent();
            winGridViewPager1.OnPageChanged += new EventHandler(winGridViewPager1_OnPageChanged);           
            this.winGridViewPager1.OnEditSelected += new EventHandler(winGridViewPager1_OnEditSelected);//属性编辑
            this.winGridViewPager1.OnDeleteSelected += new EventHandler(winGridViewPager1_OnDeleteSelected);//标识器报废
            

            this.winGridViewPager1.OnStartExport += new EventHandler(pager1_OnStartExport);
            this.winGridViewPager1.OnEndExport += new EventHandler(pager1_OnEndExport);
            //winGridViewPager1.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.AllCells
            winGridViewPager1.dataGridView1.MultiSelect = false;
            
        }

        void pager1_OnEndExport(object sender, EventArgs e)
        {

        }

        void pager1_OnStartExport(object sender, EventArgs e)
        {
            int pageIndex = winGridViewPager1.PagerInfo.CurrenetPageIndex;
            string where = GetSql();
            DataTable table = OracleUtils.ExecuteDataset(OracleUtils.ConnectionString, CommandType.Text, where).Tables[0];
            this.winGridViewPager1.AllToExport = table;
        }



        /// <summary>
        /// 初始化分页表格
        /// </summary>
        private void initlizeDatagrid()
        {

            //控制表格显示的列,以及每一列要显示的列名
            this.winGridViewPager1.Dock = DockStyle.Fill;
            this.winGridViewPager1.dataGridView1.Dock = DockStyle.Fill;
            this.winGridViewPager1.AddColumnAlias("编号", "编号");
            this.winGridViewPager1.AddColumnAlias("标识器ID号", "标识器ID号");
            this.winGridViewPager1.AddColumnAlias("标识器型号", "标识器型号");
            this.winGridViewPager1.AddColumnAlias("地面高程", "地面高程(米)");
            this.winGridViewPager1.AddColumnAlias("标识器埋深", "标识器埋深(米)");
            this.winGridViewPager1.AddColumnAlias("所属道路", "所属道路");
            this.winGridViewPager1.AddColumnAlias("使用状态", "使用状态");
            this.winGridViewPager1.AddColumnAlias("权属单位", "权属单位");
            this.winGridViewPager1.AddColumnAlias("设计单位", "设计单位");
            this.winGridViewPager1.AddColumnAlias("设计人姓名", "设计人姓名");
            this.winGridViewPager1.AddColumnAlias("施工单位", "施工单位");
            this.winGridViewPager1.AddColumnAlias("施工责任人", "施工责任人");
            this.winGridViewPager1.AddColumnAlias("施工监理", "施工监理");
            this.winGridViewPager1.AddColumnAlias("监理责任人", "监理责任人");
            this.winGridViewPager1.AddColumnAlias("备注", "备注");

            this.winGridViewPager1.DisplayColumns = "编号,标识器ID号,标识器型号,地面高程,标识器埋深,所属道路,使用状态,权属单位,设计单位,设计人姓名,施工单位,施工责任人,施工监理,监理责任人,备注";
            this.winGridViewPager1.dataGridView1.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.AllCells;
          
            winGridViewPager1.BackColor = Color.LightCyan;//间隔颜色

            //隐藏右键功能按钮
            //winGridViewPager1.dataGridView1.ContextMenuStrip.Items[1].Visible = false;
            winGridViewPager1.dataGridView1.ContextMenuStrip.Items[4].Visible = false;
            winGridViewPager1.dataGridView1.ContextMenuStrip.Items[5].Visible = false;
            winGridViewPager1.dataGridView1.ContextMenuStrip.Items[6].Visible = false;
            winGridViewPager1.dataGridView1.ContextMenuStrip.Items[7].Visible = false;
            //winGridViewPager1.dataGridView1.ContextMenuStrip.Items[1].Text = "定位查看";
            winGridViewPager1.dataGridView1.ContextMenuStrip.Items[2].Text = "属性编辑";
            winGridViewPager1.dataGridView1.ContextMenuStrip.Items[3].Text = "标识器报废";

            winGridViewPager1.AppendedMenu = this.contextMenuStrip1;

            //右键菜单宽度
            winGridViewPager1.dataGridView1.ContextMenuStrip.AutoSize = false;
            winGridViewPager1.dataGridView1.ContextMenuStrip.Width = 150;
            //数据铺满表格
            //this.winGridViewPager1.dataGridView1.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.Fill;
            //控制间隔的颜色
            winGridViewPager1.BackColor = Color.LightCyan;//间隔颜色
            //控制每页显示的最大数据量
            winGridViewPager1.PagerInfo.RecordCount = rows;
            winGridViewPager1.PagerInfo.PageSize = maxPageIndex;
            winGridViewPager1.dataGridView1.Refresh();
            //winGridViewPager1.Controls.RemoveAt(1);

        }
        /// <summary>
        /// 页面刷新
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void winGridViewPager1_OnPageChanged(object sender, EventArgs e)
        {
            LoadData();

        }
        /// <summary>
        /// 属性编辑
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void winGridViewPager1_OnEditSelected(object sender, EventArgs e)
        {
            DataGridView grid = sender as DataGridView;
            if (grid != null && grid.SelectedRows.Count > 0)
            {
                DataGridViewRow row = grid.SelectedRows[0];
                //string id = row.Cells["LSSYS_ID"].Value.ToString();
                string id = row.Cells[LSSYS_ID_VALUE].Value.ToString();
                try
                {
                    string flagid = row.Cells["标识器ID号"].Value.ToString();
                    string flagno = row.Cells["编号"].Value.ToString();
                    string gc = row.Cells["地面高程"].Value.ToString();
                    string flagtype = row.Cells["标识器型号"].Value.ToString();
                    string deep = row.Cells["标识器埋深"].Value.ToString();
                    string street = row.Cells["所属道路"].Value.ToString();
                    string belongComp = row.Cells["权属单位"].Value.ToString();
                    string designComp = row.Cells["设计单位"].Value.ToString();
                    string designer = row.Cells["设计人姓名"].Value.ToString();
                    string workComp = row.Cells["施工单位"].Value.ToString();
                    string worker = row.Cells["施工责任人"].Value.ToString();
                    string monitorComp = row.Cells["施工监理"].Value.ToString();
                    string monitor = row.Cells["监理责任人"].Value.ToString();
                    string remark = row.Cells["备注"].Value.ToString();


                    FrmFlagEdits frm = new FrmFlagEdits(id, flagid, flagno, flagtype, deep, street, gc, belongComp, designComp, designer,workComp, worker, monitorComp, monitor, remark);
                    frm.refresh += new FrmFlagEdits.Handle(LoadData);//改变值的事件                      
                    frm.ShowDialog();
                    winGridViewPager1.Refresh();
                }
                catch (Exception ex)
                {
                    MessageBox.Show("属性编辑失败:" + ex.ToString(), "错误", MessageBoxButtons.OK, MessageBoxIcon.Error);
                }
            }
            else
            {
                MessageBox.Show("没有选择记录", "提示");
            }
            
        }

        /// <summary>
        /// 标识器报废
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void winGridViewPager1_OnDeleteSelected(object sender, EventArgs e)
        {
            DataGridView grid = sender as DataGridView;
            if (grid != null && grid.SelectedRows.Count > 0)
            {
                DataGridViewRow row = grid.SelectedRows[0];
                //string id = row.Cells["LSSYS_ID"].Value.ToString();
                string id = row.Cells[LSSYS_ID_VALUE].Value.ToString();
                try
                {
                    if (MessageBox.Show("确定废弃?", "确认", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes)
                    {
                        string sql = "update 标识器 t set t.使用状态='废弃' where t.lssys_id=" + id;
                        OracleUtils.ExecuteNonQuery(OracleUtils.ConnectionString, CommandType.Text, sql);
                        winGridViewPager1.dataGridView1.Rows.Remove(row);
                        winGridViewPager1.Refresh();
                        MessageBox.Show("标识器废弃成功!", "结果", MessageBoxButtons.OK, MessageBoxIcon.Information);
                    }
                }
                catch (Exception ex)
                {
                    MessageBox.Show("标识器报废失败:" + ex.ToString(), "错误", MessageBoxButtons.OK, MessageBoxIcon.Error);
                }
            }
            else
            {
                MessageBox.Show("没有选择记录", "提示");
            }
        }    
        private void FrmFlagManagers_Load(object sender, EventArgs e)
        {
            //string sql = "select 编号,标识器ID号,地面高程,标识器埋深,对象编号,对象类型,所属道路,使用状态 from 标识器";
            bindComboxStreet();
            LoadData();

            IS_OPEN = true;
        }

        private void LoadData()
        {
            int pageIndex = winGridViewPager1.PagerInfo.CurrenetPageIndex;
            string sqlData = GetSql(pageIndex);
            initlizeDatagrid();
            DataTable table = OracleUtils.ExecuteDataset(OracleUtils.ConnectionString, CommandType.Text, sqlData).Tables[0];
            winGridViewPager1.DataSource = table.DefaultView;
            //for (int i = 0; i < winGridViewPager1.dataGridView1.Rows.Count; i++)
            //{
            //    if (winGridViewPager1.dataGridView1.Rows[i].Cells["标识器埋深"].Value != null)
            //    {
            //        double depth = Convert.ToDouble(winGridViewPager1.dataGridView1.Rows[i].Cells["标识器埋深"].Value);
            //        string str1 = String.Format("{0:F}", depth);
            //        winGridViewPager1.dataGridView1.Rows[i].Cells["标识器埋深"].Value = str1;
            //    }
            //    if (winGridViewPager1.dataGridView1.Rows[i].Cells["地面高程"].Value != null)
            //    {
            //        double height = Convert.ToDouble(winGridViewPager1.dataGridView1.Rows[i].Cells["地面高程"].Value);
            //        string str1 = String.Format("{0:F}", height);
            //        winGridViewPager1.dataGridView1.Rows[i].Cells["地面高程"].Value = str1;
            //    }

            //}
            winGridViewPager1.Refresh();
        }

        private void LoadData(int pageIndex)
        {
            string sqlData = GetSql(pageIndex);
            initlizeDatagrid();
            DataTable table = OracleUtils.ExecuteDataset(OracleUtils.ConnectionString, CommandType.Text, sqlData).Tables[0];
            winGridViewPager1.DataSource = table.DefaultView;
            //for (int i = 0; i < winGridViewPager1.dataGridView1.Rows.Count; i++)
            //{
            //    if (winGridViewPager1.dataGridView1.Rows[i].Cells["标识器埋深"].Value != null)
            //    {
            //        double depth = Convert.ToDouble(winGridViewPager1.dataGridView1.Rows[i].Cells["标识器埋深"].Value);
            //        string str1 = String.Format("{0:F}", depth);
            //        winGridViewPager1.dataGridView1.Rows[i].Cells["标识器埋深"].Value = str1;
            //    }
            //    if (winGridViewPager1.dataGridView1.Rows[i].Cells["地面高程"].Value != null)
            //    {
            //        double height = Convert.ToDouble(winGridViewPager1.dataGridView1.Rows[i].Cells["地面高程"].Value);
            //        string str1 = String.Format("{0:F}", height);
            //        winGridViewPager1.dataGridView1.Rows[i].Cells["地面高程"].Value = str1;
            //    }

            //}
            winGridViewPager1.Refresh();
        }

        private string GetSql()
        {

            string sqlCount = "select count(1) from 标识器 where 使用状态 = '使用中'";

            string sqlData = "select 编号,标识器ID号,标识器型号,地面高程,标识器埋深,所属道路,LSSYS_ID as " + LSSYS_ID_VALUE + ",X坐标,Y坐标,使用状态,权属单位,设计单位,设计人姓名,施工单位,施工责任人,施工监理,监理责任人,备注 " +
                "from (select t.*,rownum row_num from 标识器 t where 使用状态 = '使用中' order by 编号)b " +
                " where 1=1";
  
            //string sqlData = "select 编号,标识器ID号,标识器型号,round(地面高程,3) as 地面高程,round(标识器埋深,3) as 标识器埋深 ,所属道路,LSSYS_ID,X坐标,Y坐标,使用状态,权属单位,设计单位,设计人姓名,施工单位,施工责任人,施工监理,监理责任人,备注 " +
            //    "from 标识器 where 使用状态 = '使用中' order by 编号 ";

            rows = int.Parse(OracleUtils.ExecuteScalar(OracleUtils.ConnectionString, CommandType.Text, sqlCount).ToString());

            return sqlData;
        }

        private string  GetSql(int pageIndex)
        {
            int minPage = (pageIndex - 1) * maxPageIndex + 1;
            int maxPage = pageIndex * maxPageIndex;
            string sqlCount = "select count(1) from 标识器 where 使用状态 = '使用中'";

            string sqlData = "select 编号,标识器ID号,标识器型号,round(地面高程,2) as 地面高程,round(标识器埋深,2) as 标识器埋深,所属道路,LSSYS_ID as " + LSSYS_ID_VALUE + ",X坐标,Y坐标,使用状态,权属单位,设计单位,设计人姓名,施工单位,施工责任人,施工监理,监理责任人,备注 " +
                "from (select t.*,rownum row_num from 标识器 t where 使用状态 = '使用中'";
      

            if (!String.IsNullOrEmpty(txt_no.Text.Trim()))
            {
                sqlCount += " and 编号 like '%" + txt_no.Text.Trim() + "%'";
                sqlData += " and 编号 like '%" + txt_no.Text.Trim() + "%'";
            }
            if (null != combo_street.SelectedItem && !String.IsNullOrEmpty(combo_street.SelectedItem.ToString().Trim()))
            {
                sqlData += " and 所属道路='" + combo_street.SelectedItem.ToString().Trim() + "'";
                sqlCount += " and 所属道路='" + combo_street.SelectedItem.ToString().Trim() + "'";
            }

            sqlData += " order by 编号)b " +
                "where(b.row_num between " + minPage + " and " + maxPage + ")";
            rows = int.Parse(OracleUtils.ExecuteScalar(OracleUtils.ConnectionString, CommandType.Text, sqlCount).ToString());

            return sqlData;
        }

        private void bindComboxStreet()
        {
            ComboBoxItem item = new ComboBoxItem();
            //item.Text = "";
            //combo_street.Items.Add(item);

            String sql = "select distinct t.所属道路 from 标识器 t where t.使用状态='使用中'";
            DataTable table = OracleUtils.ExecuteDataset(OracleUtils.ConnectionString, CommandType.Text, sql).Tables[0];
            foreach (DataRow row in table.Rows)
            {
                item = new ComboBoxItem();
                item.Text = row[0].ToString();
                if (!item.Text.Equals(""))
                    combo_street.Items.Add(item);
            }
        }

        private void FrmFlagManagers_FormClosing(object sender, FormClosingEventArgs e)
        {
            IS_OPEN = false;
            //Thread downloadJob = new Thread(new ParameterizedThreadStart(doSave));
            //downloadJob.IsBackground = true;
            //downloadJob.Start(e);
            //globeControl1.Globe.Layers["标识器"].Save();
            globeControl1.Globe.MemoryLayer.RemoveAllFeature();

            globeControl1.Refresh();

        }
        private void doSave(Object e)
        { 
            //保存标识器图层
            try
            {
                globeControl1.Globe.Layers["标识器"].Save();
            }
            catch (Exception ex)
            {
                
            }

        }

        private void btn_query_Click(object sender, EventArgs e)
        {
            try
            {
                LoadData(1);
            }
            catch (Exception ex)
            {
                MessageBox.Show("查询失败:" + ex.ToString(), "错误", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }

        private void btn_add_batch_Click(object sender, EventArgs e)
        {
            if (ds == null && null != globeControl1)
            {
                FrmFlagDatabase frmDB = new FrmFlagDatabase(globeControl1);
                if (frmDB.ShowDialog() == DialogResult.OK)
                {
                    ds = FrmFlagDatabase.ds;
                }
            }

            if (ds != null && null != globeControl1)
            {
                FrmAddFlagBatch frmFlag = new FrmAddFlagBatch(globeControl1, ds);
                if (frmFlag.ShowDialog() == DialogResult.OK)
                {
                    addNodeToLayerManagerNode(frmFlag.flags);
                }
            }
        }

        private Boolean CheckDatasetGeoReference(GSODataset dataset)
        {
            Boolean bSuccess = false;
            if (dataset.GeoReferenceType == EnumGeoReferenceType.Flat)
            {
                if (MessageBox.Show("数据没有空间参考信息,请设置空间参考信息!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Exclamation) == DialogResult.OK)
                {
                    String strPath = Path.GetDirectoryName(Application.ExecutablePath) + "\\Coordinate Systems";
                    OpenFileDialog dlg = new OpenFileDialog();

                    dlg.InitialDirectory = strPath;
                    dlg.RestoreDirectory = true;

                    dlg.Filter = "投影文件|*.prj||";
                    if (dlg.ShowDialog() == DialogResult.OK)
                    {
                        bSuccess = dataset.LoadProjectionFromESRIFile(dlg.FileName);
                    }
                }
            }
            else
            {
                return true;
            }
            return bSuccess;
        }

        private void addNodeToLayerManagerNode(GSOLayer layer)
        {
            if (layer != null)
            {
                GSODataset dataset = layer.Dataset;
                CheckDatasetGeoReference(layer.Dataset);
                TreeNode node = new TreeNode();
                node.Tag = layer;
                node.Text = layer.Dataset.Caption;
                node.ImageIndex = 0;
                node.SelectedImageIndex = 0;
                node.Checked = layer.Visible;
                layerManagerNode.Nodes.Insert(0, node);
                layerManagerNode.Expand();
            }
        }

        private void btn_add_menu_Click(object sender, EventArgs e)
        {
            if (null != globeControl1)
            {
                FrmAddSinMark frm = new FrmAddSinMark(globeControl1);
                frm.Show();
            }
        }

        private void 标识对象ToolStripMenuItem_Click(object sender, EventArgs e)
        {
            if (winGridViewPager1 != null && winGridViewPager1.dataGridView1 != null && winGridViewPager1.dataGridView1.SelectedRows.Count > 0)
            {
                DataGridViewRow row = winGridViewPager1.dataGridView1.SelectedRows[0];
                try
                {
                    this.Hide();
                    string id = row.Cells["编号"].Value.ToString();
                    FrmFlagDetail p = new FrmFlagDetail(globeControl1, id);
                    p.showParentForm += new FrmFlagDetail.Handle(showThisForm);//改变值的事件  
                    p.Show();
                }
                catch (Exception ex)
                {
                    MessageBox.Show("失败:" + ex.ToString(), "错误", MessageBoxButtons.OK, MessageBoxIcon.Error);
                }
            }
        }

        private void showThisForm()
        {
            this.Show();
        }
        /// <summary>
        /// 位置查看
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void toolStripMenuItem2_Click(object sender, EventArgs e)
        {
            if (winGridViewPager1 != null && winGridViewPager1.dataGridView1 != null && winGridViewPager1.dataGridView1.SelectedRows.Count > 0)
            {
                DataGridViewRow row = winGridViewPager1.dataGridView1.SelectedRows[0];
                try
                {
                    this.WindowState = FormWindowState.Minimized;
                    //string id = row.Cells["LSSYS_ID"].Value.ToString();
                    string id = row.Cells[LSSYS_ID_VALUE].Value.ToString();
                    string flagno = row.Cells["编号"].Value.ToString();
                    string flagstreet = row.Cells["所属道路"].Value.ToString();
                    double x = Convert.ToDouble(row.Cells["X坐标"].Value);
                    double y = Convert.ToDouble(row.Cells["Y坐标"].Value);
                    GSOFeature flagFeature = globeControl1.Globe.Layers.GetLayerByCaption("标识器").GetFeatureByID(int.Parse(id));

                    string type = "";
                    string pipe = "";
                    string sql = "select t.标识器型号,t.对象编号 from 标识器 t where t.编号='" + flagno + "'";
                    using (OracleDataReader reader = OracleUtils.ExecuteReader(OracleUtils.ConnectionString, CommandType.Text, sql))
                    {
                        while (reader.Read())
                        {
                            type = reader.GetString(0);
                            pipe = reader.GetString(1);
                        }
                    }


                    GSOLabel label = new GSOLabel();
                    label.Text = "标识器编号:" + flagno + "\r\n" +
                                 "标识器类型:" + type + "\r\n" +
                        //"标识对象编号:" + pipe + "\r\n" +
                                 "所属道路:" + flagstreet;
                    label.Style = new GSOLabelStyle();
                    label.Style.TextStyle.FontSize = 18;
                    label.Style.TextStyle.ForeColor = Color.FromArgb(0, 0, 0, 255);
                    label.Style.Opaque = 0.8; //设置标注的透明度,取值区间是0-1   
                    label.Style.TracktionLineType = EnumTracktionLineType.Solid;
                    label.Style.TextStyle.FontHeight = 10;
                    label.Style.TextStyle.FontName = "黑体";
                    label.Style.TractionLineEndPos = new GSOPoint2d(80, 60);

                    GSOFeature f = new GSOFeature();
                    f.Geometry = flagFeature.Geometry;
                    f.Label = label;
                    GSOFeature newFeature = globeControl1.Globe.MemoryLayer.AddFeature(f);
                    globeControl1.Globe.MemoryLayer.ObjectMinVisiblePixelSize=-1;
                    globeControl1.Globe.MemoryLayer.ObjectMaxVisibleDistance = -1;
                    globeControl1.Globe.JumpToFeature(newFeature, 20);
                    this.globeControl1.Refresh();

                }
                catch (Exception ex)
                {
                    MessageBox.Show("标识器定位失败:" + ex.ToString(), "错误", MessageBoxButtons.OK, MessageBoxIcon.Error);
                }
            }
        }


    }
}