在高亮显示、选择中、或者动态数据的时候我们都会使用到GraphicsLayer中的ElementGraphicsLayer或者FeatureGraphicsLayer,我们如何增加动态点以及考虑回调的问题来解决刷新整个页面的问题呢?
一、我们加入一个element到ElementGraphicsLayer中可参考如下代码:
public string drawPoint(double x, double y, string lableText)
{
ESRI.ArcGIS.ADF.Web.Geometry.Point pPt = new ESRI.ArcGIS.ADF.Web.Geometry.Point();
pPt.X = x;
pPt.Y = y;
int nR = Convert.ToByte(System.Configuration.ConfigurationManager.AppSettings["TextColorR"]);
int nG = Convert.ToByte(System.Configuration.ConfigurationManager.AppSettings["TextColorG"]);
int nB = Convert.ToByte(System.Configuration.ConfigurationManager.AppSettings["TextColorB"]);
int nFontSize = Convert.ToByte(System.Configuration.ConfigurationManager.AppSettings["TextFontSize"]);
System.Drawing.Color myColor = System.Drawing.Color.FromArgb(nR, nG, nB);
ESRI.ArcGIS.ADF.Web.Display.Graphics.GraphicElement ge = null;
ESRI.ArcGIS.ADF.Web.Display.Graphics.GraphicElement ge1 = null;
ESRI.ArcGIS.ADF.Web.FontInfo zoomFont = new ESRI.ArcGIS.ADF.Web.FontInfo("Arial", nFontSize, myColor, ESRI.ArcGIS.ADF.Web.FontStyle.Bold);
ESRI.ArcGIS.ADF.Web.Display.Symbol.TextMarkerSymbol tMarkSyb = new ESRI.ArcGIS.ADF.Web.Display.Symbol.TextMarkerSymbol(zoomFont, lableText);
nR = Convert.ToByte(System.Configuration.ConfigurationManager.AppSettings["PointColorR"]);
nG = Convert.ToByte(System.Configuration.ConfigurationManager.AppSettings["PointColorG"]);
nB = Convert.ToByte(System.Configuration.ConfigurationManager.AppSettings["PointColorB"]);
myColor = System.Drawing.Color.FromArgb(nR, nG, nB);
ge = new ESRI.ArcGIS.ADF.Web.Display.Graphics.GraphicElement(pPt, tMarkSyb);
ge1 = new ESRI.ArcGIS.ADF.Web.Display.Graphics.GraphicElement(pPt, myColor);
IEnumerable gfc = m_map.GetFunctionalities();
ESRI.ArcGIS.ADF.Web.DataSources.Graphics.MapResource gResource = null;
foreach (IGISFunctionality gfunc in gfc)
{
if (gfunc.Resource is ESRI.ArcGIS.ADF.Web.DataSources.Graphics.MapResource)
{
gResource = (ESRI.ArcGIS.ADF.Web.DataSources.Graphics.MapResource)gfunc.Resource;
break;
}
}
if (gResource == null)
{
return "";
}
ESRI.ArcGIS.ADF.Web.Display.Graphics.ElementGraphicsLayer glayer = null;
foreach (System.Data.DataTable dt in gResource.Graphics.Tables)
{
if (dt is ESRI.ArcGIS.ADF.Web.Display.Graphics.ElementGraphicsLayer)
{
glayer = (ESRI.ArcGIS.ADF.Web.Display.Graphics.ElementGraphicsLayer)dt;
break;
}
}
if (glayer == null)
{
glayer = new ESRI.ArcGIS.ADF.Web.Display.Graphics.ElementGraphicsLayer();
gResource.Graphics.Tables.Add(glayer);
}
//清除已有数据
glayer.Clear();
glayer.TableName = SelectLyrName;
glayer.Add(ge1);
glayer.Add(ge);
if (m_map.ImageBlendingMode == ImageBlendingMode.WebTier)
{
m_map.Refresh();
}
else if (m_map.ImageBlendingMode == ImageBlendingMode.Browser)
{
//只刷新Graphics Resource
m_map.RefreshResource(gResource.Name);
}
return m_map.CallbackResults.ToString();
}
二、考虑回调的问题
在你触发事件的过程中加入,这里以一个控件CallbackButton1代替,在CallbackButton1_Clicked事件中加入下面一行:
CallbackButton1.CallbackResults.CopyFrom(Map1.CallbackResults);
其中控件的回调机制可参考Asp.Net的相关文档