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 + -
显示快捷键?