Newer
Older
EMS_REFACTOR / FrmFlagManagers.cs
nn-203 on 26 Jul 2017 19 KB first commit
using System;
using System.Data;
using System.Drawing;
using System.Windows.Forms;
using DevComponents.DotNetBar;
using GeoScene.Globe;
using GeoScene.Data;
using GeoScene.Engine;
using System.IO;
using System.Data.OracleClient;

namespace Cyberpipe
{
    public partial class FrmFlagManagers : Office2007Form
    {
        GSOGlobeControl globeControl1 = null;
        int maxPageIndex = 20;
        public static bool IS_OPEN = false;
        int rows = 0;
        public static GSODataSource ds = null;
        TreeNode layerManagerNode = null;
        string LSSYS_ID_VALUE = "标识器自增编号";

        public FrmFlagManagers(GSOGlobeControl _globeControl1)
        {
            globeControl1 = _globeControl1;
            InitializeComponent();
            winGridViewPager1.OnPageChanged += winGridViewPager1_OnPageChanged;
            winGridViewPager1.OnEditSelected += winGridViewPager1_OnEditSelected;//属性编辑
            winGridViewPager1.OnDeleteSelected += winGridViewPager1_OnDeleteSelected;//标识器报废
            
            winGridViewPager1.OnStartExport += pager1_OnStartExport;
            winGridViewPager1.dataGridView1.MultiSelect = false;
        }

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

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

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

            //隐藏右键功能按钮
            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[2].Text = "属性编辑";
            winGridViewPager1.dataGridView1.ContextMenuStrip.Items[3].Text = "标识器报废";

            winGridViewPager1.AppendedMenu = contextMenuStrip1;

            //右键菜单宽度
            winGridViewPager1.dataGridView1.ContextMenuStrip.AutoSize = false;
            winGridViewPager1.dataGridView1.ContextMenuStrip.Width = 150;
            //控制间隔的颜色
            winGridViewPager1.BackColor = Color.LightCyan;//间隔颜色
            //控制每页显示的最大数据量
            winGridViewPager1.PagerInfo.RecordCount = rows;
            winGridViewPager1.PagerInfo.PageSize = maxPageIndex;
            winGridViewPager1.dataGridView1.Refresh();
        }
        /// <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)
            {
                MessageBox.Show("没有选择记录", "提示");
                return;
            }
            DataGridViewRow row = grid.SelectedRows[0];
            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 += LoadData; //改变值的事件
                frm.ShowDialog();
                winGridViewPager1.Refresh();
            }
            catch (Exception ex)
            {
                MessageBox.Show("属性编辑失败:" + ex, "错误", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }

        /// <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)
            {
                MessageBox.Show("没有选择记录", "提示");
                return;
            }

            DataGridViewRow row = grid.SelectedRows[0];
            string id = row.Cells[LSSYS_ID_VALUE].Value.ToString();
            try
            {
                if (MessageBox.Show("确定废弃?", "确认", MessageBoxButtons.YesNo, MessageBoxIcon.Question) != DialogResult.Yes)
                    return;

                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, "错误", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }

        private void FrmFlagManagers_Load(object sender, EventArgs e)
        {
            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;
            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;
            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";

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

            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;
            globeControl1.Globe.MemoryLayer.RemoveAllFeature();

            globeControl1.Refresh();
        }

        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)
            {
                FrmAddWellShp frm = new FrmAddWellShp(globeControl1, ds, true);
                if (frm.ShowDialog() == DialogResult.OK)
                    addNodeToLayerManagerNode(frm.rukuLayer);
            }
        }

        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)
            {
                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
                {
                    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()
        {
            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) return;

            DataGridViewRow row = winGridViewPager1.dataGridView1.SelectedRows[0];
            try
            {
                WindowState = FormWindowState.Minimized;
                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.标识器型号 from 标识器 t where t.编号='" + flagno + "'";
                DataTable table = OracleUtils.ExecuteDataset(OracleUtils.ConnectionString, CommandType.Text, sql).Tables[0];
                foreach (DataRow rr in table.Rows)
                {
                    type = rr[0].ToString();
                }

                GSOLabel label = new GSOLabel();
                label.Text = "标识器编号:" + flagno + "\r\n" +
                             "标识器类型:" + type + "\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);
                globeControl1.Refresh();
            }
            catch (Exception ex)
            {
                MessageBox.Show("标识器定位失败:" + ex.ToString(), "错误", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }

    }
}