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