Newer
Older
GHFX_REFACTOR / EMS_Forms / Form_EventManager.cs
wxn on 28 Nov 2016 16 KB 管线定位
using System;
using System.Data;
using System.Data.OracleClient;
using System.Drawing;
using System.Windows.Forms;
using DevComponents.DotNetBar;
using GeoScene.Data;
using GeoScene.Globe;

namespace Cyberpipe.EMS_Forms
{
    public partial class Form_EventManager : Office2007Form
    {
        private GSOGlobeControl globeControl1;
//        DataTable dt = new DataTable();
        OracleConnection conn;

        int maxPageIndex = 20;
        int rows;

        public static bool IS_OPEN;

        public Form_EventManager(GSOGlobeControl globeControl1)
        {
            this.globeControl1 = globeControl1;
            globeControl1.Globe.MemoryLayer.ObjectMinVisiblePixelSize = -1;
            InitializeComponent();

            winGridViewPager1.OnPageChanged += winGridViewPager1_OnPageChanged;
            winGridViewPager1.OnAddNew += winGridViewPager1_OnEditSelected; //属性编辑
            winGridViewPager1.OnEditSelected += winGridViewPager1_OnAddNew;//右键定位

            winGridViewPager1.OnStartExport += pager1_OnStartExport;
            winGridViewPager1.OnEndExport += pager1_OnEndExport;
            //this.winGridViewPager1.ExportCurrent += new ExportCurrentEventHandler(pager1_ExportCurrent);
            //this.winGridViewPager1.ExportAll += new ExportAllEventHandler(pager1_ExportAll);

            winGridViewPager1.dataGridView1.MultiSelect = false;
        }

        private void Form_EventManager_Load(object sender, EventArgs e)
        {
            try
            {
                dateTimePicker_end.Value = DateTime.Now;
                dateTimePicker_start.Value = DateTime.Now.AddDays(-6);

                LoadData();

                conn = OledbHelper.sqlConnection();
                string com = "select * from PATROLER";
                conn.Open();
                OracleCommand cmd = new OracleCommand(com, conn);
                OracleDataReader dr = cmd.ExecuteReader();
                while (dr.Read())
                {
                    String name = Convert.ToString(dr["USERNAME"]);
                    comboBox_name.Items.Add(name);

                }
                conn.Close();

                if (!Utility.userRole.Equals("事件编辑"))
                {
                    winGridViewPager1.dataGridView1.ContextMenuStrip.Items[2].Visible = false;
                }

                IS_OPEN = true;

            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.ToString());
            }

        }

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

            //控制表格显示的列,以及每一列要显示的列名
            winGridViewPager1.Dock = DockStyle.Fill;
            winGridViewPager1.dataGridView1.Dock = DockStyle.Fill;


            winGridViewPager1.AddColumnAlias("上报时间", "上报时间");
            winGridViewPager1.AddColumnAlias("编号", "编号");
            winGridViewPager1.AddColumnAlias("事件描述", "事件描述");
            winGridViewPager1.AddColumnAlias("纬度", "纬度");
            winGridViewPager1.AddColumnAlias("事件地点", "事件地点");
            winGridViewPager1.AddColumnAlias("经度", "经度");
            winGridViewPager1.AddColumnAlias("上报人员", "上报人员");
            winGridViewPager1.AddColumnAlias("人员ID", "人员ID");
            winGridViewPager1.AddColumnAlias("任务编号", "任务编号");
            winGridViewPager1.AddColumnAlias("处理结果", "处理结果");
            winGridViewPager1.AddColumnAlias("处理状态", "处理状态");

            winGridViewPager1.DisplayColumns = "上报时间,事件描述,事件地点,上报人员,任务编号,处理结果,处理状态";
           
            winGridViewPager1.BackColor = Color.LightCyan;//间隔颜色

            //隐藏右键功能按钮
            
            winGridViewPager1.dataGridView1.ContextMenuStrip.Items[3].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.AutoSize = false;
            winGridViewPager1.dataGridView1.ContextMenuStrip.Width = 150;
            //数据铺满表格
            winGridViewPager1.dataGridView1.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.Fill;
            //控制间隔的颜色
            winGridViewPager1.BackColor = Color.LightCyan;//间隔颜色
            //控制每页显示的最大数据量
            winGridViewPager1.PagerInfo.RecordCount = rows;
            winGridViewPager1.PagerInfo.PageSize = maxPageIndex;
            winGridViewPager1.dataGridView1.Refresh();
            //winGridViewPager1.Controls.RemoveAt(1);

        }

        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];
            winGridViewPager1.AllToExport = table;
        }
        /// <summary>
        /// 右键定位
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void winGridViewPager1_OnAddNew(object sender, EventArgs e)
        {
            DataGridView grid = sender as DataGridView;
            if (grid != null && grid.SelectedRows.Count > 0)
            {
                DataGridViewRow row = grid.SelectedRows[0];
                try
                {
                    WindowState = FormWindowState.Minimized;                    
                    globeControl1.Globe.MemoryLayer.RemoveAllFeature();
                    WindowState = FormWindowState.Minimized;
                    double x = Convert.ToDouble(row.Cells["经度"].Value);
                    double y = Convert.ToDouble(row.Cells["纬度"].Value);
                    string username = Convert.ToString(row.Cells["上报人员"].Value);
                    string Atime = Convert.ToString(row.Cells["上报时间"].Value);
                    string location = Convert.ToString(row.Cells["事件地点"].Value);
                    string descp = Convert.ToString(row.Cells["事件描述"].Value);
                    ///////////////////////////////////////
                    /*******设置飞行与创建模型******/

                    EnumAltitudeMode altmode = EnumAltitudeMode.Absolute;
                    GSOPoint3d p = new GSOPoint3d();
                    p.X = x;
                    p.Y = y;
                    //p.X = 120.608;
                    //p.Y = 31.1907;
                    p.Z = 0;
                    GSOGeoModel model = new GSOGeoModel();
                    string filepath = Application.StartupPath + "/EMSgcm/小旗子/hongqi/hongqi.gcm";

                    model.FilePath = filepath;
                    model.Position = p;
                    model.AltitudeMode = EnumAltitudeMode.Absolute;
                    GSOFeature f = new GSOFeature();
                    f.Geometry = model;
                    f.Name = "事件:" + Atime;
                    //double s = 0.1;
                    //f.Geometry.Scale(s, s, s);
                    GSOFeature newFeature = globeControl1.Globe.MemoryLayer.AddFeature(f);

                    GSOLabel label = new GSOLabel();
                    label.Text = "上报人员:" + username + "\r\n" +
                                    "上报时间:" + Atime + "\r\n" +
                                    "上报地点:" + location + "\r\n" +
                                    "事件描述:" + descp;


                    label.Style = new GSOLabelStyle();
                    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);
                    newFeature.Label = label;

                    globeControl1.Globe.JumpToFeature(newFeature, 3000);

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

            }
            else
            {
                MessageBox.Show("没有选择记录", "提示");
            }
        }
        /// <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];
                try
                {
                    int dbId = Convert.ToInt32(row.Cells["编号"].Value);
                    string result = Convert.ToString(row.Cells["处理结果"].Value);
                    
                    Form_EventResult form = new Form_EventResult(dbId, result);
                    form.refresh += LoadData;//改变值的事件  
                    form.ShowDialog();
                }
                catch (Exception ex)
                {
                    MessageBox.Show("编辑失败:" + ex, "错误", MessageBoxButtons.OK, MessageBoxIcon.Error);
                }
            }
            else
            {
                MessageBox.Show("没有选择记录", "提示");
            }

        }

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

        }

        private void LoadData()
        {
            if (dateTimePicker_start.Value != null && dateTimePicker_end.Value != null)
            {
                int compare = DateTime.Compare(dateTimePicker_start.Value, dateTimePicker_end.Value);
                if (compare == 1)
                {
                    MessageBox.Show("起始时间不能大于终止时间,请重新设置!", "提示");
                    return;
                }
            }
            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;

            if (table.Rows.Count == 0)
            {
                MessageBox.Show("没有找到任何数据!", "提示");
            }
            for (int i = 0; i < table.Rows.Count; i++)
            {
                if (winGridViewPager1.dataGridView1.Rows[i].Cells["处理结果"].Value != null && !(winGridViewPager1.dataGridView1.Rows[i].Cells["处理结果"].Value.ToString().Trim().Equals("")))
                {
                    winGridViewPager1.dataGridView1.Rows[i].Cells["处理状态"].Value = "已处理";
                }
                else {
                    winGridViewPager1.dataGridView1.Rows[i].Cells["处理状态"].Value = "未处理";
                }

            }
            winGridViewPager1.Refresh();
        }

        private void LoadData(int pageIndex)
        {
            if (dateTimePicker_start.Value != null && dateTimePicker_end.Value != null)
            {
                int compare = DateTime.Compare(dateTimePicker_start.Value, dateTimePicker_end.Value);
                if (compare == 1)
                {
                    MessageBox.Show("起始时间不能大于终止时间,请重新设置!", "提示");
                    return ;
                }
            }
            string sqlData = GetSql(pageIndex);
            initlizeDatagrid();
            DataTable table = OracleUtils.ExecuteDataset(OracleUtils.ConnectionString, CommandType.Text, sqlData).Tables[0];
            winGridViewPager1.DataSource = table.DefaultView;
            
            if (table.Rows.Count == 0)
            {
                MessageBox.Show("没有找到任何数据!", "提示");
            }
            for (int i = 0; i < table.Rows.Count; i++)
            {
                if (winGridViewPager1.dataGridView1.Rows[i].Cells["处理结果"].Value != null && !(winGridViewPager1.dataGridView1.Rows[i].Cells["处理结果"].Value.ToString().Trim().Equals("")))
                {
                    winGridViewPager1.dataGridView1.Rows[i].Cells["处理状态"].Value = "已处理";
                }
                else
                {
                    winGridViewPager1.dataGridView1.Rows[i].Cells["处理状态"].Value = "未处理";
                }

            }
            winGridViewPager1.Refresh();
        }

        private string GetSql()
        {
            string sqlCount = "select count(*) from ACCIDENT where 1=1";

            string sqlData = "select ACCIDENTTIME as 上报时间,DBID as 编号,DESCRIBE as 事件描述,"+
                "LATITUDE as 纬度,LOCALE as 事件地点,LONGITUDE as 经度,PATROLERNAME 上报人员,"+
                "PATROLER_ID as 人员ID,TASK_ID as 任务编号,RESULT as 处理结果,'' as 处理状态 " +
                "from (select t.*,rownum row_num from ACCIDENT t order by DBID)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(*) from ACCIDENT where 1=1";

            string sqlData = "select ACCIDENTTIME as 上报时间,DBID as 编号,DESCRIBE as 事件描述," +
                             "LATITUDE as 纬度,LOCALE as 事件地点,LONGITUDE as 经度,PATROLERNAME 上报人员," +
                             "PATROLER_ID as 人员ID,TASK_ID as 任务编号,RESULT as 处理结果,'' as 处理状态 " +
                             "from (select t.*,rownum row_num from ACCIDENT t where 1=1";

            if (!String.IsNullOrEmpty(comboBox_name.Text.Trim()))
            {
                sqlCount += " and PATROLERNAME='" + comboBox_name.Text.Trim() + "' ";
                sqlData += " and PATROLERNAME='" + comboBox_name.Text.Trim() + "' ";
            }
            if (dateTimePicker_start.Value != null)
            {
                sqlCount += "and ACCIDENTTIME>=to_date('" + dateTimePicker_start.Value.ToShortDateString() +
                            "','yyyy-MM-dd') ";
                sqlData += "and ACCIDENTTIME>=to_date('" + dateTimePicker_start.Value.ToShortDateString() +
                           "','yyyy-MM-dd') ";
            }
            if (dateTimePicker_end.Value != null)
            {
                DateTime time = dateTimePicker_end.Value;
                time = time.AddDays(1);
                sqlCount += "and ACCIDENTTIME<=to_date('" + time.ToShortDateString() + "','yyyy-MM-dd') ";
                sqlData += "and ACCIDENTTIME<=to_date('" + time.ToShortDateString() + "','yyyy-MM-dd') ";
            }
            sqlData += " order by DBID desc)b " +
                       "where(b.row_num between " + minPage + " and " + maxPage + ")";
            rows =
                int.Parse(OracleUtils.ExecuteScalar(OracleUtils.ConnectionString, CommandType.Text, sqlCount).ToString());

            return sqlData;

        }

        private void Form_EventManager_FormClosing(object sender, FormClosingEventArgs e)
        {
            globeControl1.Globe.MemoryLayer.RemoveAllFeature();
            IS_OPEN = false;
        }


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

        }
        

    }
}