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) { 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); winGridViewPager1.dataGridView1.MultiSelect = false; } 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[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 = this.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 += new FrmFlagEdits.Handle(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) { 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) return; DataGridViewRow row = winGridViewPager1.dataGridView1.SelectedRows[0]; try { this.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.标识器型号,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" + "所属道路:" + 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); } } } }