clsproquerypopupmenu.cs.svn-base

来自「以构建的方式来实现对通用的查询统计」· SVN-BASE 代码 · 共 204 行

SVN-BASE
204
字号
using System;
using System.Collections.Generic;
using System.Text;
using System.Data;
using System.Data.OleDb;
using System.Collections;
using System.Drawing;
using System.Windows.Forms;
using dist.hb.EnvQueryStat.Pub;
using ESRI.ArcGIS.Carto;
using ESRI.ArcGIS.Geodatabase;
using ESRI.ArcGIS.Display;
using ESRI.ArcGIS.Geometry;

namespace dist.hb.EnvQueryStat.Query
{
  class clsMainKeyInfo
  {
    public string FieldName;
    public object FieldValue;
  }

  class clsProQueryPopupMenu
  {
    #region "类模块初始化"
    const int ZoomGeo  = 999;
    const int FlashGeo = 998;
    const string ZoomCMD = "缩放到当前要素";
    const string FlashCMD = "闪烁当前要素";
    public DevExpress.XtraBars.PopupMenu popupMenu1;
    public DevExpress.XtraBars.BarManager barManager1;
    public clsAttFieldProc AttFieldProc;
    public int AbstractQueryID;//查询模板
    public OleDbConnection dbConn;
    public string WebServerIP = "";
    public clsQueryHelp QueryHelp = null;
    private ESRI.ArcGIS.Controls.IMapControl4 m_MapControl;
    public ESRI.ArcGIS.Controls.IMapControl4 MapControl
    {
      set
      {
        m_MapControl = value;
      }

    }
    private ArrayList MainKeyInfos;//使用时初始化主关键字的信息
   
    private IFeature Feature = null;//
    public clsProQueryPopupMenu()
    {
      popupMenu1 = null;
      barManager1 = null;
      dbConn = null;
      AttFieldProc = null;
      MainKeyInfos = new ArrayList();
    }
    public void ShowPopuMenu(System.Drawing.Point pt, DataRow dr)
    {
      if (pt == null || dr == null || m_MapControl == null) return;
      if (QueryHelp != null)
      {
        GetFeature(dr);
      }

      CreatePopuMenu();
      GetQueryMainKeyInfo(dr);
      popupMenu1.ShowPopup(pt);
    }

    #endregion

    #region "辅助处理函数
    private void GetFeature(DataRow dr)
    {
      Feature = null;
      if (dr == null || QueryHelp == null ||  m_MapControl == null) return;
      string AttField = QueryHelp.QueryTemplateInfo.strAttField;
      object obj = dr[AttField];
      if (obj == null || obj == "") return;

      IFeatureLayer FLayer = null;
      IFeatureCursor FCur = null;

      FLayer = clsGISPub.FindFeatureLayer(m_MapControl.Map, QueryHelp.QueryTemplateInfo.strLayerName);
      if (FLayer == null) return;
      //这里的编码是数字类型的。
      FCur = clsGISPub.SearchFeature(FLayer.FeatureClass, QueryHelp.QueryTemplateInfo.strSpaceField + "=" + obj.ToString() + "");
      if (FCur == null) return;
      Feature =  FCur.NextFeature();
    }

    private DevExpress.XtraBars.BarButtonItem CreateButtomItem(int ActionID,string ActionName,string URL, bool bGroup)
    {
      if(popupMenu1 == null || barManager1 == null) return null;
      DevExpress.XtraBars.BarButtonItem barButtonItem_New = new DevExpress.XtraBars.BarButtonItem();
      barManager1.Items.Add(barButtonItem_New);
      //popupMenu1.LinksPersistInfo.Add(new DevExpress.XtraBars.LinkPersistInfo(barButtonItem_New));
      popupMenu1.ItemLinks.Add(barButtonItem_New, bGroup);

      barButtonItem_New.Caption = ActionName;
      barButtonItem_New.Id = ActionID;
      barButtonItem_New.Name = URL;
      barButtonItem_New.ItemClick += new DevExpress.XtraBars.ItemClickEventHandler(this.barButtonItem_New_ItemClick);

      return barButtonItem_New;
    }

    private void barButtonItem_New_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e)
    {
      if (e.Link.Caption == ZoomCMD)
      {
        if (Feature == null) return;
        m_MapControl.Extent = Feature.Shape.Envelope;
      }
      else if (e.Link.Caption == FlashCMD)
      {
        if (Feature == null) return;
        ISimpleFillSymbol pFillsyl = new SimpleFillSymbol();
        ESRI.ArcGIS.Display.RgbColor color = new RgbColorClass();
        color.Red = 255;
        color.Blue = 0;
        color.Green = 0;
        pFillsyl.Color = color;

        m_MapControl.FlashShape(Feature.Shape, 3, 300, pFillsyl);
      }
      else
      {
        string url;
        url = "http://" + WebServerIP + "/" + e.Item.Name + "?" + MakeURL();
        frmBrowseQueryInfo frmQueryInfo = new frmBrowseQueryInfo();
        frmQueryInfo.URL = url;
        frmQueryInfo.ShowDialog();
      }
    }

    private void LoadActionInfo()
    {
      if (dbConn == null) return;
      string sql = "SELECT URL, ActionName, FS_ActionOfQuery.ActionID, AbstractQueryID " +
                   " FROM FS_ActionOfQuery INNER JOIN FS_Action ON FS_ActionOfQuery.ActionID = FS_Action.ActionID " +
                   " where AbstractQueryID =" + AbstractQueryID.ToString();
      OleDbConnection connection = new OleDbConnection(dbConn.ConnectionString);

      connection.Open();
      OleDbCommand command = new OleDbCommand(sql, connection);
      OleDbDataReader reader = command.ExecuteReader();
      if (!reader.HasRows) return;
      while (reader.Read())
      {
        string url = reader.GetString(0);
        string ActionName = reader.GetString(1);
        int ActionID = reader.GetInt32(2);
        CreateButtomItem(ActionID,ActionName,url, false);
      }
      reader.Close();


    }
    public void CreatePopuMenu()
    {
      if (popupMenu1 == null || barManager1 == null) return;
      popupMenu1.LinksPersistInfo.Clear();
      barManager1.Items.Clear();
      LoadActionInfo();
      //增加缩放到当前选择的空间要素
      CreateButtomItem(ZoomGeo, ZoomCMD, "ZoomGeo", true);
      //增加闪烁当前要素
      CreateButtomItem(FlashGeo, FlashCMD, "FlashGeo", false);
    }

    //获取查询主键信息
    void GetQueryMainKeyInfo(DataRow dr)
    {
      if (AttFieldProc == null || dr == null) return;
      ArrayList AList = AttFieldProc.GetMainField();
      if (AList == null || AList.Count == 0) return;
      MainKeyInfos.Clear();
      for (int i = 0; i < AList.Count; i++)
      {
        clsMainKeyInfo KeyInfo = new clsMainKeyInfo();
        KeyInfo.FieldName = AList[i].ToString();
        KeyInfo.FieldValue = dr[KeyInfo.FieldName].ToString();
        MainKeyInfos.Add(KeyInfo);
      }
    }

    string MakeURL()
    {
      if (MainKeyInfos == null) return "";
      string SQL = "";
      for (int i = 0; i < MainKeyInfos.Count; i++)
      {
        clsMainKeyInfo KeyInfo = MainKeyInfos[i] as clsMainKeyInfo;
        if (SQL == "") SQL = KeyInfo.FieldName + "=" + KeyInfo.FieldValue;
        else SQL = SQL + "&" + KeyInfo.FieldName + "=" + KeyInfo.FieldValue;
      }
      return SQL;
    }
    #endregion
  }

}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?