using System; using System.Data; using System.Windows.Forms; using DevComponents.DotNetBar; using GeoScene.Data; using GeoScene.Engine; using GeoScene.Globe; namespace Cyberpipe { public partial class FrmQuerySQL : Office2007Form { private GSOGlobeControl m_globeControl; private GSODataset ds; string sql; public string currentLayerName; static FrmQuerySQL frm; DataTable table = new DataTable(); // string strLable = ""; MainFrm.DataGridViewDelegate m_InitDataGridViewX1; private MainFrm.PageControlStuct _pageControl; public static void ShowForm(GSOGlobeControl _ctl, MainFrm.DataGridViewDelegate InitDataGridViewX1, MainFrm.PageControlStuct pageControl) { if (frm == null) { frm = new FrmQuerySQL(_ctl, InitDataGridViewX1,pageControl); frm.Show(_ctl.Parent); } else { if (frm.WindowState == FormWindowState.Minimized) { frm.WindowState = FormWindowState.Normal; } } } public FrmQuerySQL(GSOGlobeControl _ctl, MainFrm.DataGridViewDelegate InitDataGridViewX1, MainFrm.PageControlStuct pageControl) { InitializeComponent(); m_globeControl = _ctl; m_InitDataGridViewX1 = InitDataGridViewX1; _pageControl = pageControl; } #region 符号按钮双击事件 private void btn_equal_Click(object sender, EventArgs e) { textBox_WhereClause.Text += " ="; } private void btn_Notequal_Click(object sender, EventArgs e) { textBox_WhereClause.Text += " <>"; } private void btn_Big_Click(object sender, EventArgs e) { textBox_WhereClause.Text += " >"; } private void btn_BigEqual_Click(object sender, EventArgs e) { textBox_WhereClause.Text += " >="; } private void btn_Small_Click(object sender, EventArgs e) { textBox_WhereClause.Text += " <"; } private void btn_Smallequal_Click(object sender, EventArgs e) { textBox_WhereClause.Text += " <="; } private void btn_Brace_Click(object sender, EventArgs e) { textBox_WhereClause.Text += " ()"; } private void btn_Like_Click(object sender, EventArgs e) { textBox_WhereClause.Text += " Like"; } private void btn_And_Click(object sender, EventArgs e) { textBox_WhereClause.Text += " AND"; } private void btn_Or_Click(object sender, EventArgs e) { textBox_WhereClause.Text += " OR"; } private void btn_IS_Click(object sender, EventArgs e) { textBox_WhereClause.Text += " IS"; } private void btn_Not_Click(object sender, EventArgs e) { textBox_WhereClause.Text += " NOT"; } private void btn_What_Click(object sender, EventArgs e) { textBox_WhereClause.Text += " ?"; } private void btn_All_Click(object sender, EventArgs e) { textBox_WhereClause.Text += " *"; } #endregion /// <summary> /// 清空按钮事件处理 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void btn_Clear_Click(object sender, EventArgs e) { textBox_WhereClause.Clear();//清空条件 } /// <summary> /// 窗体初始化事件处理 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void Frm_QuerySQL_Load(object sender, EventArgs e) { for (int i = 0; i < m_globeControl.Globe.Layers.Count; i++)//获取树节点后中所有的layer图层 { GSOLayer layer = m_globeControl.Globe.Layers[i]; if (layer != null && layer.Dataset != null && layer.Dataset.IsFeatureDataset) { string name = layer.Name; if (layer.Type == EnumLayerType.FeatureLayer && !name.Contains("\\")) { if (name.EndsWith("管线") || name.EndsWith("附属物") || name.EndsWith("管点")) { if (!name.Contains("施工") && !name.Contains("规划")) cbox_Layers.Items.Add(name); } } } } cbox_Layers.SelectedIndex = 0; } //获取唯一值添加到listbox_Value中 string str1; string str2; /// <summary> /// 获取唯一值按钮事件处理 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void btn_GetValue_Click(object sender, EventArgs e) { try { listBox_Value.Items.Clear(); for (int j = 0; j < sourcefDataset.FieldCount; j++) { GSOFieldAttr fieldef = sourcefDataset.GetField(j); if (listBox_Field.SelectedItem.ToString() == fieldef.Name && fieldef.Type == EnumFieldType.Text) { str1 = "'"; str2 = "'"; } } ClassSearchAnalysis.ResultDistinctDataTable(out table, cbox_Layers.SelectedItem.ToString(),listBox_Field.SelectedItem.ToString()); for (int i = 0; i < table.Rows.Count; i++) { DataRow dr = table.Rows[i]; string colString1 = dr[0].ToString(); if (colString1 == null || colString1.Trim() == "") { //continue; } string col = str1 + colString1 + str2; listBox_Value.Items.Add(col); } str1 = ""; str2 = ""; } catch (Exception ex) { MessageBox.Show(ex.Message); } } //双击添加到查询列中 private void listBox_Field_DoubleClick(object sender, EventArgs e) { textBox_WhereClause.Text += " " + listBox_Field.Text; } private void listBox_Value_DoubleClick(object sender, EventArgs e) { textBox_WhereClause.Text += " " + listBox_Value.Text; } /// <summary> /// 应用按钮事件处理 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void btn_Apply_Click(object sender, EventArgs e) { currentLayerName = cbox_Layers.SelectedItem.ToString(); // ClassSearchAnalysis.ResultDataTable(out table, m_globeControl, currentLayerName, textBox_WhereClause.Text); // if (table != null && table.Rows.Count != 0) // { // strLable = currentLayerName + " || 共有:" + table.Rows.Count + "记录"; // m_InitDataGridViewX1(table, strLable, currentLayerName, true); // } PaginationUtil.ResetPagination(); int total = PaginationUtil.CountSql(currentLayerName, textBox_WhereClause.Text); if (total > 0) { string strLable = currentLayerName + " || 共有:" + total + "记录"; string sql = PaginationUtil.GetQuerySql(m_globeControl, currentLayerName, textBox_WhereClause.Text); PaginationUtil pagination = PaginationUtil.InitPagination(sql, total, _pageControl, m_InitDataGridViewX1, strLable, currentLayerName); pagination.FillDataGridView(); } else { m_InitDataGridViewX1(null, "", "", false); MessageBox.Show("没有查询到复合条件的数据!","提示",MessageBoxButtons.OK,MessageBoxIcon.Information); } } /// <summary> /// 取消按钮事件处理 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void btn_Cancel_Click(object sender, EventArgs e) { Close(); } GSOFeatureDataset sourcefDataset; /// <summary> /// 图层下拉框选中项改变事件处理 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void cbox_Layers_SelectedIndexChanged(object sender, EventArgs e) { listBox_Field.Items.Clear(); GSOLayer m_layer = m_globeControl.Globe.Layers.GetLayerByCaption(cbox_Layers.SelectedItem.ToString().Trim());//获取当前选择的layer图层 if (m_layer == null) return; GSOFeatureLayer flayer = m_layer as GSOFeatureLayer; ds = m_layer.Dataset; sourcefDataset = ds as GSOFeatureDataset; sourcefDataset.Open(); for (int j = 0; j < sourcefDataset.FieldCount; j++) { GSOFieldAttr fieldef = sourcefDataset.GetField(j); listBox_Field.Items.Add(fieldef.Name); } //设置当前选择字段为第一个 listBox_Value.Items.Clear(); } /// <summary> /// 列表项单击事件处理 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void listBox_Field_Click(object sender, EventArgs e) { btn_GetValue_Click(sender, e); } /// <summary> /// 窗体关闭事件处理 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void Frm_QuerySQL_FormClosing(object sender, FormClosingEventArgs e) { m_InitDataGridViewX1(null, "", "", false); frm = null; } } }