zoukankan      html  css  js  c++  java
  • ArcGIS.Server.9.2.DotNet自带例子分析(五、一)

    目的:
    1.arcgis server9.2 ADF自定义一个简单的Task控件

    准备工作:
    1.找到DeveloperKit\SamplesNET\Server\Web_Applications目录下的Common_SimpleTaskCSharp.zip。

    开始:
    0.自定义任务控件一般是从任务抽象类(Task或者FloatingPanelTask)继承而来。FloatingPanelTask与Task的相同之处在于它们都是从System.Web.UI.WebControls.CompositeControl继承而来,而System.Web.UI.WebControls.CompositeControl实现了ICallbackEventHandler接口,所以它们都具有Ajax能力。 FloatingPanelTask与Task的区别在于是否被包含在FloatingPanel中。任务抽象类Task,Task类除了实现ICallbackEventHandler外,还实现了二个接口:IBuddyControlSupport以及ITask。
    1.新建名为SimpleTask的ASP.NET Web应用程序,然后在SimpleTask的解决方案下在建立一个叫SimpleTaskLib的类库工程,用在自定义Task控件。
    2.在SimpleTask工程的引用中添加对工程SimpleTaskLib的引用,这样可以方便调试。
    3.在SimpleTaskLib工程中新建myTask.cs文件,myTask类继承自:FloatingPanelTask控件,需要添加对ESRI.ArcGIS.ADF.Web.UI.WebControls的引用,因为是web控件当然还需要添加对System.Web的引用。具体如下:

     1using System;
     2using System.Collections.Generic;
     3using System.Text;
     4using ESRI.ArcGIS.ADF.Web.UI.WebControls;
     5
     6namespace SimpleTaskLib
     7{
     8    //继承自FloatingPanelTask控件
     9    public class myTask : FloatingPanelTask
    10    {
    11        //Task执行事件,继承FloatingPanelTask控件必须重写这个方法
    12        public override void ExecuteTask()
    13        {
    14        }

    15
    16        //继承FloatingPanelTask控件必须重写这个方法
    17        public override List<GISResourceItemDependency> GetGISResourceItemDependencies()
    18        {
    19            List<GISResourceItemDependency> list = new List<GISResourceItemDependency>();
    20            return list;
    21        }

    22    }

    23}

    24

    4.重写CreateChildControls方法以达到我们想要的显示内容,在Task控件上显示2个输入框和一个按钮,具体的代码和说明如下:

     1protected override void CreateChildControls()
     2        {
     3            Controls.Clear();
     4            //调用父控件的呈现方法
     5            base.CreateChildControls();
     6
     7            //实例化输入框控件和按钮控件
     8            textBox = new TextBox();
     9            textBox.ID = "textBox";
    10            phantomTextBox = new TextBox();
    11            phantomTextBox.ID = "phantomTextBox";
    12            phantomTextBox.Style[HtmlTextWriterStyle.Display] = "none";
    13            button = new HtmlInputButton();
    14            button.ID = "button";
    15            button.Value = ButtonText;
    16
    17            //把输入框控件和按钮控件作为子控件添加到Task控件上
    18            Controls.Add(textBox);
    19            Controls.Add(phantomTextBox);
    20            Controls.Add(button);
    21
    22            //获取输入框内容的js
    23            string getArgumentJS = string.Format("'textBoxValue=' + document.getElementById('{0}').value", textBox.ClientID);
    24            //按钮的onClick脚本代码,调用executeTask方法实现,这个方法存在于Esri提供的display_task.js中
    25            //产生的参数如下:WebForm_DoCallback('TaskManager1$SimpleTask',argument,processCallbackResult,context,postBackError,true)
    26            //EventArg=executeTask&taskJobID=2& textBoxValue=10"
    27            string onClick = string.Format("executeTask({0},\"{1}\");", getArgumentJS, CallbackFunctionString);
    28            //按钮的回车脚本代码
    29            string onKeyDown = string.Format("if(event.keyCode==13){{{0}return false;}}", onClick);
    30            //按钮添加onClick 事件
    31            button.Attributes.Add("onclick", onClick);
    32            //按钮添加回车事件
    33            textBox.Attributes.Add("onkeydown", onKeyDown);
    34        }

    5.重写GetCallbackResult()和ExecuteTask()方法,具体代码和说明如下:

     1public override string GetCallbackResult()
     2        {
     3            //由于Task继承于CompositeControl,因此会将变量参数内容存储在变量_callbackArg中。一般在GetCallbackResult()中会利用_callbackArg生成Input内容。
     4            NameValueCollection keyValColl = CallbackUtility.ParseStringIntoNameValueCollection(_callbackArg);
     5            Input = keyValColl["textBoxValue"];
     6            return base.GetCallbackResult();
     7        }

     8
     9        //Task执行事件,继承FloatingPanelTask控件必须重写这个方法
    10        //ExecuteTask重写方法,里面可以处理业务逻辑,将结果保存为一种Results,可以是SimpleTaskResult、DataSet或TaskResultNode。
    11        public override void ExecuteTask()
    12        {
    13            Results = null;
    14            if (Input == null)
    15            {
    16                return;
    17            }
     
    18            string textBoxValue = Input as string;
    19
    20            string heading = string.Format("The time on the server is {0}", DateTime.Now.ToShortTimeString());
    21            string detail = string.Format("The value in the text box is: {0}", textBoxValue);
    22            SimpleTaskResult str = new SimpleTaskResult(heading, detail);
    23            Results = str;   
    24        }

    25

    4.编译生成dll文件,这样一个自定义的Task控件就开发完成了。接下来就是在页面中使用这个控件。
    5.把上面的那个dll添加到vs的左边的工具箱上,然后SimpleTask工程Default.aspx的页面上添加一个TaskResults1控件;TaskManager1控件,然后把工具箱上的那个SimpleTask控件拖到TaskManager1控件中ID为MyTask1,BuddyControl属性为TaskResults1。
    6.在页面上继续添加一个Menu1控件,把TaskManager1控件BuddyControl的属性设为Menu1。这样就可以运行查看这个自定义Task的功能了。

  • 相关阅读:
    .Net Core实现下载多个文件并压缩打包
    VS上使用Docker调试编译net core项目时卡在 vsdbgvs2017u5 exits,deleting.
    spring boot actuator监控详细介绍
    数仓知识
    layui使用 弹窗 layer
    Spring配置数据源(连接池)
    Spring配置文件-引入其他配置文件(分模块开发import)&Spring相关API
    Spring配置文件-Bean标签配置
    事务的四大特征&事务隔离级别
    事务
  • 原文地址:https://www.cnblogs.com/hll2008/p/1272564.html
Copyright © 2011-2022 走看看