Newer
Older
EMS_SZ / FrmFlagManager.cs
root on 21 Mar 2016 25 KB first
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;

namespace Cyberpipe
{
    public partial class FrmFlagManager : Office2007Form
    {
        public static GeoScene.Engine.GSODataSource ds = null;
        public static bool IS_OPEN = false;
        GSOGlobeControl globeControl1;
        TreeNode layerManagerNode = null;
        List<GSOFeature> Features = new List<GSOFeature>();

        private int currentpage =1;
        private int lastpage = 1;
        private int pagesize = 16;

        public FrmFlagManager(GSOGlobeControl globeControl1)
        {
            InitializeComponent();
            this.globeControl1 = globeControl1;
        }

        private void FrmFlagManager_Load(object sender, EventArgs e)
        {
            try
            {
                bindComboxStreet();
                bindComboxChargOrg();
                bindComboxDesignOrg();
                reloadGrid(1);
                initForm();
                IS_OPEN = true;
            }
            catch (Exception ex)
            {
                MessageBox.Show("窗体加载失败:" + ex.ToString(), "错误", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }

        #region 自定义方法

        private void initForm()
        {
            if (Utility.userRole.IndexOf("标识器添加") == -1)
            {
                btn_add_batch.Visible = false;
                btn_add_menu.Visible = false;
            }
            if (Utility.userRole.IndexOf("标识器编辑") == -1)
            {
                dataGridViewX1.Columns["btnEdit"].Visible = false;
            }
            if (Utility.userRole.IndexOf("标识器报废") == -1)
            {
                dataGridViewX1.Columns["btnDel"].Visible = false;
            }
        }

        private void reloadGrid(int pageIndex)
        {
            string sqlCount = "select count(*) from 标识器 where 使用状态 = '使用中'";
            String sqlData = "select * from (select rownum as rowno,lssys_id," +
                                   "标识器id号," +
                                   "编号," +
                                   "标识器型号," +
                                   "标识器埋深," +
                                   "x坐标," +
                                   "y坐标," +
                                   "埋设时间," +
                                   "所属道路," +
                                   "权属单位," +
                                   "设计单位," +
                                   "设计人姓名," +
                                   "施工单位," +
                                   "施工责任人," +
                                   "施工监理," +
                                   "监理责任人," +
                                   "'编辑' as edit," +
                                   "'报废' as del " +
                              "from 标识器 " +
                             "where 使用状态 = '使用中'";

            if (!String.IsNullOrEmpty(txt_no.Text.Trim()))
            {
                sqlCount += " and 编号='" + txt_no.Text.Trim() + "'";
                sqlData += " and 编号='" + 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() + "'";
            }
            if (null!=combo_org_charger.SelectedItem && !String.IsNullOrEmpty(combo_org_charger.SelectedItem.ToString().Trim()))
            {
                sqlData += " and 权属单位='" + combo_org_charger.SelectedItem.ToString().Trim() + "'";
                sqlCount += " and 权属单位='" + combo_org_charger.SelectedItem.ToString().Trim() + "'";
            }
            if (null!=combo_org_design.SelectedItem && !String.IsNullOrEmpty(combo_org_design.SelectedItem.ToString().Trim()))
            {
                sqlData += " and 设计单位='" + combo_org_design.SelectedItem.ToString() + "'";
                sqlCount += " and 设计单位='" + combo_org_design.SelectedItem.ToString() + "'";
            }
            sqlData += " and rownum<=" + (pagesize*pageIndex) + ") table_alias where table_alias.rowno>=" + ((pageIndex - 1) * pagesize+1);

            int rows = int.Parse(OracleUtils.ExecuteScalar(OracleUtils.ConnectionString, CommandType.Text, sqlCount).ToString());
            int pages = 0;
            if (rows % pagesize == 0)
            {
                pages = rows / 16;
            }
            else
            {
                pages = rows / 16 + 1;
            }

            lastpage = pages;

            lab_page_msg.Text = "共" + rows + "条记录,每页" + pagesize + "条,第" + pageIndex + "页,共" + pages + "页";

            combo_page_num.Items.Clear();
            for (int i = 1; i <= pages; i++)
            {
                combo_page_num.Items.Add(new ComboBoxItem(i.ToString(), i.ToString()));
            }

            if (lastpage == 1)
            {
                btn_page_first.Enabled = false;
                btn_page_pre.Enabled = false;
                btn_page_last.Enabled = false;
                btn_page_next.Enabled = false;
            }
            else if (pageIndex == 1)
            {
                btn_page_first.Enabled = false;
                btn_page_pre.Enabled = false;
                btn_page_last.Enabled = true;
                btn_page_next.Enabled = true;
            }
            else if (pageIndex == lastpage)
            {
                btn_page_first.Enabled = true;
                btn_page_pre.Enabled = true;
                btn_page_last.Enabled = false;
                btn_page_next.Enabled = false;
            }
            else
            {
                btn_page_first.Enabled = true;
                btn_page_pre.Enabled = true;
                btn_page_last.Enabled = true;
                btn_page_next.Enabled = true;
            }
            try
            {
                DataTable table = OracleUtils.ExecuteDataset(OracleUtils.ConnectionString, CommandType.Text, sqlData).Tables[0];
                dataGridViewX1.DataSource = table;
            }
            catch (Exception ex)
            { 
            
            }

        }

        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 bindComboxChargOrg()
        {
            ComboBoxItem item = new ComboBoxItem();
            //item.Text = "";
            //combo_org_charger.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_org_charger.Items.Add(item);
            }
        }

        private void bindComboxDesignOrg()
        {
            ComboBoxItem item = new ComboBoxItem();
            //item.Text = "";
            //combo_org_design.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_org_design.Items.Add(item);
            }
        }

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

        #endregion

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

        private void dataGridViewX1_CellClick(object sender, DataGridViewCellEventArgs e)
        {
            if (e.RowIndex < 0 || e.ColumnIndex < 0)
            {
                return;
            }
            string buttonText = dataGridViewX1.Rows[e.RowIndex].Cells[e.ColumnIndex].Value.ToString();
            string id = dataGridViewX1.Rows[e.RowIndex].Cells["LSSYS_ID"].Value.ToString();
            switch (buttonText)
            {
                case "属性编辑":
                    try
                    {
                        string flagid = dataGridViewX1.Rows[e.RowIndex].Cells["标识器id号"].Value.ToString();
                        string flagno = dataGridViewX1.Rows[e.RowIndex].Cells["编号"].Value.ToString();
                        string flagtype = dataGridViewX1.Rows[e.RowIndex].Cells["标识器型号"].Value.ToString();
                        string lat = dataGridViewX1.Rows[e.RowIndex].Cells["X坐标"].Value.ToString();
                        string lon = dataGridViewX1.Rows[e.RowIndex].Cells["Y坐标"].Value.ToString();
                        string deep = dataGridViewX1.Rows[e.RowIndex].Cells["标识器埋深"].Value.ToString();
                        string deepday = dataGridViewX1.Rows[e.RowIndex].Cells["埋设时间"].Value.ToString();
                        string street = dataGridViewX1.Rows[e.RowIndex].Cells["所属道路"].Value.ToString();
                        string chargeorg = dataGridViewX1.Rows[e.RowIndex].Cells["权属单位"].Value.ToString();
                        string designorg = dataGridViewX1.Rows[e.RowIndex].Cells["设计单位"].Value.ToString();
                        string designperson = dataGridViewX1.Rows[e.RowIndex].Cells["设计人姓名"].Value.ToString();
                        string workorg = dataGridViewX1.Rows[e.RowIndex].Cells["施工单位"].Value.ToString();
                        string workperson = dataGridViewX1.Rows[e.RowIndex].Cells["施工责任人"].Value.ToString();
                        string monitororg = dataGridViewX1.Rows[e.RowIndex].Cells["施工监理"].Value.ToString();
                        string monitorperson = dataGridViewX1.Rows[e.RowIndex].Cells["监理责任人"].Value.ToString();
                        FrmFlagEdit frm = new FrmFlagEdit(id, flagid, flagno, flagtype, lat, lon, deep, deepday, street, chargeorg, designorg, designperson, workorg, workperson, monitororg, monitorperson);
                        frm.ShowDialog();
                    }
                    catch (Exception ex)
                    {
                        MessageBox.Show("属性编辑失败:" + ex.ToString(), "错误", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    }
                    break;
                case "标识器报废":
                    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);
                            dataGridViewX1.Rows.RemoveAt(e.RowIndex);
                            dataGridViewX1.Refresh();
                            MessageBox.Show("标识器废弃成功!", "结果", MessageBoxButtons.OK, MessageBoxIcon.Information);
                        }
                    }
                    catch (Exception ex)
                    {
                        MessageBox.Show("标识器报废失败:" + ex.ToString(), "错误", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    }
                    break;
                default:
                    
                    break;
            }
        }

        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 void btn_add_menu_Click(object sender, EventArgs e)
        {
            if (null != globeControl1)
            {
                FrmAddSinMark frm = new FrmAddSinMark(globeControl1);
                frm.ShowDialog();
            }
        }

        private void FrmFlagManager_FormClosing(object sender, FormClosingEventArgs e)
        {
            IS_OPEN = false;
            globeControl1.Globe.MemoryLayer.RemoveAllFeature();
            globeControl1.Globe.MemoryLayer.RemoveAllFeature();
            foreach (GSOFeature f in Features)
            {
                f.Label = null;
            }
            //globeControl1.Globe.Layers["标识器"].Save();
            Features.RemoveRange(0, Features.Count);
            globeControl1.Refresh();
        }

        private void btn_db_Click(object sender, EventArgs e)
        {
            DataTable table = dataGridViewX1.DataSource as DataTable;
            if (table.Rows.Count > 0)
            {
                SaveFileDialog savefiledialog = new SaveFileDialog();
                savefiledialog.Filter = "Excel文?件t|*.xls,*.xlsx";
                savefiledialog.AddExtension = true;
                savefiledialog.FileName = "标识器" + DateTime.Now.ToString("yyyyMMdd") + DateTime.Now.Hour + DateTime.Now.Minute + DateTime.Now.Second;
                if (savefiledialog.ShowDialog() == DialogResult.OK)
                {
                    try
                    {
                        //创建一个EXCEL应用程序
                        Microsoft.Office.Interop.Excel.Application excel = new Microsoft.Office.Interop.Excel.Application();
                        //是否显示导出过程(显示创建后的EXCEL)
                        excel.Visible = false;
                        //定义缺省值
                        Missing miss = Missing.Value;
                        //创建一个新的工作簿
                        Microsoft.Office.Interop.Excel.Workbooks workbooks = excel.Workbooks;
                        Microsoft.Office.Interop.Excel.Workbook workbook = workbooks.Add(miss);
                        Microsoft.Office.Interop.Excel.Worksheet sheet = workbook.Worksheets[1];

                        sheet.Name = "电子标识器";

                        //设置表头
                        for (int i = 0; i < dataGridViewX1.ColumnCount - 2; i++)
                        {
                            sheet.Cells[1, i + 1] = dataGridViewX1.Columns[i].HeaderText;
                        }

                        //填充数据
                        for (int i = 0; i < dataGridViewX1.Rows.Count; i++)//所要添加的行数
                        {
                            for (int j = 0; j < dataGridViewX1.Columns.Count - 2; j++)//每行的列数
                            {
                                //将数据填充到对应的单元格中
                                sheet.Cells[i + 2, j + 1] = dataGridViewX1.Rows[i].Cells[j].Value.ToString();
                            }
                        }

                        //设置表格样式
                        //设置列标题的背景颜色
                        Microsoft.Office.Interop.Excel.Range er = sheet.Range[sheet.Cells[1, 1], sheet.Cells[1, dataGridViewX1.Columns.Count - 2]];
                        //重新选择单元格范围
                        int rowscount = dataGridViewX1.Rows.Count;//this.dataGridView1.Rows.Count;
                        int columncount = dataGridViewX1.Columns.Count - 2;//this.dataGridView1.ColumnCount;
                        //将范围重新确定为每一行的第一个单元格
                        er = sheet.Range[sheet.Cells[1, 1], sheet.Cells[rowscount, 1]];
                        //选中EXCEL所有表格
                        er = sheet.Range[sheet.Cells[1, 1], sheet.Cells[rowscount + 1, columncount + 1]];
                        //让EXCEL中的所有单元格的列宽碎文字的长短自动调整
                        er.EntireColumn.AutoFit();
                        // 让EXCEL的文本水平居中方式
                        er.HorizontalAlignment = Microsoft.Office.Interop.Excel.XlHAlign.xlHAlignCenter;

                        //保存文件
                        string strSaveFile2 = savefiledialog.FileName;
                        if (File.Exists(strSaveFile2))
                        {
                            int z = 1;
                            do
                            {
                                strSaveFile2 = System.IO.Path.Combine(System.IO.Path.GetDirectoryName(savefiledialog.FileName + "\\" + System.IO.Path.GetFileNameWithoutExtension(savefiledialog.FileName) + z.ToString() + ".xlsx"));
                                z++;
                            } while (File.Exists(strSaveFile2));
                        }

                        sheet.SaveAs(strSaveFile2, miss, miss, miss, miss, miss, Microsoft.Office.Interop.Excel.XlSaveAsAccessMode.xlNoChange, miss, miss, miss);
                        //关闭表格
                        workbook.Close(false, miss, miss);
                        workbooks.Close();
                        //释放资源
                        excel.Quit();
                        MessageBox.Show("导出成功!", "结果", MessageBoxButtons.OK, MessageBoxIcon.Information);
                    }
                    catch (Exception ex)
                    {
                        MessageBox.Show("导出失败:" + ex.ToString(), "错误", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    }
                }
                else
                {
                    return;
                }
            }
            else
            {
                MessageBox.Show("没有可导出的数据!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Asterisk);
            }
        }

        private void btn_first_Click(object sender, EventArgs e)
        {
            currentpage = 1;
            reloadGrid(currentpage);         
        }

        private void btn_last_Click(object sender, EventArgs e)
        {
            currentpage = lastpage;
            reloadGrid(currentpage);
        }

        private void btn_pre_Click(object sender, EventArgs e)
        {
            currentpage--;
            if (currentpage > 0)
            {
                reloadGrid(currentpage);
            }
            else
            {
                currentpage = 1;
            }
        }

        private void btn_nex_Click(object sender, EventArgs e)
        {
            currentpage++;
            if (lastpage > currentpage)
            {
                reloadGrid(currentpage);
            }
            else
            {
                currentpage = lastpage;
            }
        }

        private void combo_page_Click(object sender, EventArgs e)
        {
            if (!String.IsNullOrEmpty(combo_page_num.Text))
            {
                currentpage = int.Parse(combo_page_num.Text);
                reloadGrid(currentpage);
            }           
                        
        }

        private void dataGridViewX1_MouseDoubleClick(object sender, MouseEventArgs e)
        {
            try
            {
                if (e.Button == MouseButtons.Left)
                {
                    DataGridView.HitTestInfo hittestinfo = dataGridViewX1.HitTest(e.X, e.Y);
                    if (hittestinfo.RowIndex > -1)
                    {
                        this.WindowState = FormWindowState.Minimized;
                        string id = dataGridViewX1.Rows[hittestinfo.RowIndex].Cells["LSSYS_ID"].Value.ToString();
                        string flagno = dataGridViewX1.Rows[hittestinfo.RowIndex].Cells["编号"].Value.ToString();
                        string flagstreet = dataGridViewX1.Rows[hittestinfo.RowIndex].Cells["所属道路"].Value.ToString();
                        double x = Convert.ToDouble(dataGridViewX1.Rows[hittestinfo.RowIndex].Cells["X坐标"].Value);
                        double y = Convert.ToDouble(dataGridViewX1.Rows[hittestinfo.RowIndex].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 = 20;
                        label.Style.TextStyle.FontName = "黑体";
                        label.Style.TractionLineEndPos = new GSOPoint2d(80, 60);

                        flagFeature.Label = label;
                        Features.Add(flagFeature);
                        globeControl1.Globe.JumpToFeature(flagFeature, 20);
                        //GSOFeature feature = flagFeature.Clone();
                        //feature.Label = label;
                        //globeControl1.Globe.MemoryLayer.AddFeature(feature);
                        //globeControl1.Globe.JumpToFeature(feature, 10);
                        this.globeControl1.Refresh();
                    }
                }                


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

    }
}