⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 selecttooltask.cs

📁 C#开发的ArcGIS Server9.2地图选择控件
💻 CS
📖 第 1 页 / 共 3 页
字号:

        #region OnPreRender method
        // Set up control rendering - not called on every callback so efficient runtime
        protected override void OnPreRender(EventArgs e)
        {
            #region Available layers list
            if (!EnsureMapControl())
                return;
            // GetQueryLayers returns an out param for invalid services, 
            //  which is only used during design time
            //  to let developer know whether any map services are down
            string[] invalidServices;
            ListItem[] layerItems = 
                Utilities.GetQueryLayers(mapCtrl, SelectionLayerNames,
                idStringDelim, out invalidServices);
            ddlLayerList.Items.AddRange(layerItems);
            if (ddlLayerList.Items.Count == 1)
                ddlLayerList.Enabled = false;
            else
                ddlLayerList.Items.Insert(0, new ListItem("<Choose layer>", "null"));
            #endregion

            #region Select toolbar
            selectToolbar.BuddyControlType = BuddyControlType.Map;
            selectToolbar.BuddyControls.Add(new BuddyControl(mapCtrl.ID));
            string toolbarGroupName = GetToolbarGroupName(mapCtrl, Page.Controls);
            selectToolbar.Group = toolbarGroupName;
            selectToolbar.UseDefaultWebResources = this.UseDefaultWebResources;
            selectToolbar.WebResourceLocation = this.WebResourceLocation;
            selectToolbar.ToolbarStyle = ToolbarStyle.ImageOnly;
            selectToolbar.ToolbarStyle = ToolbarStyle.ImageOnly;
            selectToolbar.Width = new Unit("200px");
            selectToolbar.Height = new Unit("32px");

            selectToolbar.ToolbarItems.Add(CreateTool("btSelectPointTool", MapClientToolAction.Point,
                "Select by single click", "select_point_1U.gif", "select_point_1D.gif"));
            selectToolbar.ToolbarItems.Add(CreateTool("btSelectRectTool", MapClientToolAction.DragRectangle,
                "Select by dragging a rectangle", "select_rect_1U.gif", "select_rect_1D.gif"));
            selectToolbar.ToolbarItems.Add(CreateTool("btSelectLineTool", MapClientToolAction.Polyline,
                "Select by drawing a line", "select_line_1U.gif", "select_line_1D.gif"));
            selectToolbar.ToolbarItems.Add(CreateTool("btSelectPolyTool", MapClientToolAction.Polygon,
                "Select by drawing a polygon", "select_poly_1U.gif", "select_poly_1D.gif"));
            selectToolbar.ToolbarItems.Add(CreateTool("btSelectCircleTool", MapClientToolAction.Circle,
                "Select by drawing a circle", "select_circle_1U.gif", "select_circle_1D.gif"));
            #endregion

            base.OnPreRender(e);
        }
        #endregion

        #region Rendering

        #region RenderContents method
        protected override void RenderContents(HtmlTextWriter writer)
        {
            /* We do control rendering here, rather than in CreateChildControls(),
                because CreateChildControls() runs every callback, whereas RenderContents
                runs on on full postback.
             */
            #region Set up
            List<Control> ctlList = new List<Control>();
            string cellText;
            string toolTip;

            // <table> opening tag
            writer.AddStyleAttribute(HtmlTextWriterStyle.FontSize, "10pt");
            writer.RenderBeginTag(HtmlTextWriterTag.Table);
            #endregion

            #region Selection layer label and drop-down
            cellText = "选择图层: ";
            toolTip = "从列表中选择一个图层使其处于可选择状态.";
            RenderTableRowControl(writer, ddlLayerList, cellText, toolTip);
            #endregion

            #region Select toolbar
            toolTip = "Choose a tool to select features on the map.";
            RenderTableRowControl(writer, selectToolbar, null, toolTip);
            #endregion

            writer.RenderEndTag();      // </table> ending tag

            //base.RenderContents(writer);
        }
        #endregion

        protected override void Render(HtmlTextWriter writer)
        {
            if (DesignMode)
            {
                RenderDesignTimeHtml(writer);
            }
            else
            {
                base.Render(writer);
            }
        }

        protected override void RenderDesignTimeHtml(HtmlTextWriter writer)
        {
            writer.RenderBeginTag(HtmlTextWriterTag.Div);
            writer.RenderBeginTag(HtmlTextWriterTag.Span);
            writer.WriteLine(string.Format("<p>SelectToolTask:{0}</p>", ID));
            writer.RenderEndTag();
            writer.RenderEndTag();
        }

        #endregion

        #endregion

        #region Rendering helper methods

        private void RenderTableRowControl(HtmlTextWriter writer, Control control,
            string cellText, string cellTooltip)
        {
            Control[] ctls = new Control[] { control };
            RenderTableRowControls(writer, ctls, cellText, cellTooltip);
        }

        private void RenderTableRowControls(HtmlTextWriter writer, Control[] controls,
            string cellText, string cellTooltip)
        {
            writer.RenderBeginTag(HtmlTextWriterTag.Tr);
            writer.AddStyleAttribute(HtmlTextWriterStyle.WhiteSpace, "nowrap");
            if (cellTooltip != null)
                writer.AddAttribute(HtmlTextWriterAttribute.Title, cellTooltip);
            writer.RenderBeginTag(HtmlTextWriterTag.Td);
            if (cellText != null)
                writer.Write(cellText);
            if (controls != null)
                foreach (Control ctl in controls)
                    ctl.RenderControl(writer);
            writer.RenderEndTag(); // td
            writer.RenderEndTag(); // tr
        }

        private Tool CreateTool(string name, MapClientToolAction action, string tooltip,
            string defaultImageName, string downImageName)
        {
            Type controlType = this.GetType();
            string imgUrl = GetEmbeddedImageUrl(defaultImageName, controlType);
            string downImgUrl = GetEmbeddedImageUrl(downImageName, controlType);

            Tool tool = new Tool(ClientID + "_" + name);
            tool.ClientAction = action.ToString();
            tool.Cursor = "pointer";
            tool.DefaultImage = imgUrl;
            tool.SelectedImage = downImgUrl;
            string assemFullName = this.GetType().Assembly.FullName;
            tool.ServerActionAssembly = assemFullName.Substring(0, assemFullName.IndexOf(","));
                //this.GetType().Assembly.FullName; // task assembly name;
            tool.ServerActionClass = typeof(SelectTool).FullName;
                //typeof(SelectTool).AssemblyQualifiedName; // namespace.toolclassname;
            tool.Text = "Select feature";
            tool.ToolTip = tooltip;
            return tool;
        }

        // currently unused
        //private DropDownList CreateToolActionDropDown()
        //{
        //    DropDownList ddlToolType = new DropDownList();
        //    ddlToolType.ID = "selectToolType";
        //    ddlToolType.Items.Add(new ListItem("Point", "Point"));      //MapPoint
        //    ddlToolType.Items.Add(new ListItem("Rectangle", "DragRectangle")); // MapDragRectangle
        //    ddlToolType.Items.Add(new ListItem("Circle", "Circle"));  // MapCircle
        //    ddlToolType.Items.Add(new ListItem("Line", "Polyline"));  // MapPolyline
        //    ddlToolType.Items.Add(new ListItem("Polygon", "Polygon")); //MapPolygon
        //    ddlToolType.ToolTip = "Tool to use when selecting";
        //    return ddlToolType;
        //}

        private string GetEmbeddedImageUrl(string imageName, Type controlType)
        {
            string fileName = controlType.Namespace + ".images." + imageName;
            string imgUrl = Page.ClientScript.GetWebResourceUrl(controlType,
                fileName);
            return imgUrl;
        }

        // Finds the group name for the first toolbar buddied to the map control
        //  (if no toolbar groups, creates a name)
        private string GetToolbarGroupName(Map map, ControlCollection controls)
        {
            string tbGroupName = "";

            string[] toolbarGroups = Toolbar.FindToolbarGroupsBuddiedTo(map.UniqueID, Page);

            if (toolbarGroups == null || toolbarGroups.Length < 1)
                tbGroupName = "SelectToolTaskToolbarGroup_" + map.UniqueID;
            else
                tbGroupName = toolbarGroups[0];

            return tbGroupName;
        }
        #endregion

        #region Input property - stores data for running task for run-task-again
        public override object Input
        {
            get
            {
                return base.Input;
            }
            set
            {
                #region Used by "Run Task Again", "Refresh" context menus
                base.Input = value;
                if (value != null)
                {
                    object[] inputs = value as object[];
                    if (inputs != null)
                    {
                        EnsureChildControls();

                        // this may not be necessary since state manager may take care of it...
                        
                        SelectLayerId = (string)inputs[0];
                        SelectMapResource = (string)inputs[1];
                        mapResMgr = (string)inputs[2];
                        SelectionGeometry = inputs[3] as ESRI.ArcGIS.ADF.Web.Geometry.Geometry;
                        if (!String.IsNullOrEmpty(SelectLayerId))
                            ddlLayerList.SelectedValue = String.Concat(
                                SelectMapResource, idStringDelim, SelectLayerId);
                    }
                }
                #endregion
            }
        }
        #endregion

        #region GetCallbackResult
        public override string GetCallbackResult()
        {
            string argUnesc = System.Uri.UnescapeDataString(_callbackArg);

            System.Collections.Specialized.NameValueCollection keyValColl = CallbackUtility.ParseStringIntoNameValueCollection(argUnesc);

            string eventArg = keyValColl["EventArg"];
            //string taskJobID = keyValColl["taskJobID"];

            // Get the type of operation requested by browser
            switch (eventArg)
            {
                case "executeTask":

                    // parse the input and store in layer ID and map resource variables
                    string lyr; string mapRes;
                    this.ParseLayerId(keyValColl["layerId"], out mapRes, out lyr);
                    this.SelectLayerId = lyr;
                    this.SelectMapResource = mapRes;

                    // Store inputs to task
                    object[] taskInputs = new object[4];
                    taskInputs[0] = SelectLayerId;
                    taskInputs[1] = SelectMapResource;
                    EnsureMapControl();
                    // mapresourcemanager only stored so other tasks (Buffer) can use it
                    taskInputs[2] = this.mapCtrl.MapResourceManager;
                    // selection geometry set in previous callback
                    taskInputs[3] = this.SelectionGeometry;
                    Input = taskInputs;

                    break;
            }

            return base.GetCallbackResult();
        }
        #endregion

        public override List<GISResourceItemDependency> GetGISResourceItemDependencies()
        {
            List<GISResourceItemDependency> list = new List<GISResourceItemDependency>();
            return list;
        }

        #region ExecuteTask method
        public override void ExecuteTask()
        {
            #region Get inputs from Input property
            object[] inputs = Input as object[];

            SelectLayerId = (string)inputs[0];
            SelectMapResource = (string)inputs[1];
            // inputs[2] is mapresourcemanager--only stored so other tasks can use it
            SelectionGeometry = inputs[3] as Geometry;

            if (String.IsNullOrEmpty(SelectLayerId) || String.IsNullOrEmpty(SelectMapResource))
            {
                Results = new SimpleTaskResult(
                    String.Concat(this.ID, ": No select layer"),
                    "No selection layer has been specified.");
                return;
            }

            if (SelectionGeometry == null) 
            {
                Results = new SimpleTaskResult(
                    String.Concat(this.ID, ": Error during selection"),
                    "Select layer, map resource or no selection geometry found.");
                return;
            }

            #endregion

            #region Set up and run query

            EnsureMapControl();

            IMapFunctionality mf = (IMapFunctionality)
                mapCtrl.GetFunctionality(SelectMapResource);
            LayerQuery lyrQuery = new LayerQuery(mf, SelectLayerId);

            lyrQuery.FilterGeometry = SelectionGeometry;

⌨️ 快捷键说明

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