ArcGIS.Server.9.2.DotNet自带例子分析(七、一)
目的:
1.arcgis server9.2 ADF实现Query查询功能。
准备工作:
1.用ArcGis Server Manager或者ArcCatalog发布一个叫usa的Map Service,并且把这个Service启动起来。
2.找到DeveloperKit\SamplesNET\Server\Web_Applications目录下的Common_QueryNewWindowCSharp.zip。
开始:
1.新建名为QueryNewWindow的ASP.NET Web应用程序, 然后在页面上添加MapResourceManager1、Button1。设置MapResourceManager1的属性Type:ArcGIS Server Local;Resource:(default)@usa;Data Source:mycomp。Button1添加Button1_Click时间,具体代码和说明如下:
1
protected void Button1_Click(object sender, EventArgs e)
2
{
3
//获取MapResourceManager1的Resource集合
4
IEnumerator egrc = MapResourceManager1.GetResources().GetEnumerator();
5
//判定初始化MapResourceManager1
6
if (!MapResourceManager1.Initialized)
7
{
8
MapResourceManager1.Initialize();
9
}
10
while (egrc.MoveNext())
11
{
12
//随机数
13
Random random = new Random();
14
int randout = random.Next(0, 1000);
15
16
//获取Resource
17
IGISResource gisresource = (IGISResource)egrc.Current;
18
//判定初始化Resource
19
if (!gisresource.Initialized)
20
{
21
gisresource.Initialize();
22
}
23
//判定是否支持QueryFunctionality
24
bool supportquery = gisresource.SupportsFunctionality(typeof(ESRI.ArcGIS.ADF.Web.DataSources.IQueryFunctionality));
25
if (supportquery)
26
{
27
//创建QueryFunctionalit
28
ESRI.ArcGIS.ADF.Web.DataSources.IQueryFunctionality qfunc;
29
qfunc = (ESRI.ArcGIS.ADF.Web.DataSources.IQueryFunctionality)gisresource.CreateFunctionality(typeof(ESRI.ArcGIS.ADF.Web.DataSources.IQueryFunctionality), null);
30
31
//查询图层id和名称
32
string[] lids;
33
string[] lnames;
34
qfunc.GetQueryableLayers(null, out lids, out lnames);
35
//要查询目标图层名称
36
string sourcelayername = "states";
37
//获取查询目标图层的index
38
int layer_index = 0;
39
for (int i = 0; i < lnames.Length; i++)
40
{
41
if (lnames[i] == sourcelayername)
42
{
43
layer_index = i;
44
break;
45
}
46
}
47
//查询过滤
48
ESRI.ArcGIS.ADF.Web.QueryFilter queryfilter = new ESRI.ArcGIS.ADF.Web.QueryFilter();
49
//要查询字段名称
50
string fieldlist = "STATE_NAME";
51
//查询的字段集
52
ESRI.ArcGIS.ADF.StringCollection strcollection = new ESRI.ArcGIS.ADF.StringCollection(fieldlist, ',');
53
queryfilter.SubFields = strcollection;
54
//查询语句
55
queryfilter.WhereClause = "STATE_NAME LIKE 'A%'";
56
//查询结果存入DataTable
57
System.Data.DataTable qdatatable = qfunc.Query(null, lids[layer_index], queryfilter);
58
qdatatable.Columns[0].ColumnName = "STATE_NAME_ALIAS";
59
//查询结果DataTable存入Session中
60
Session["dt" + randout] = qdatatable;
61
}
62
63
string argval = "?id=" + randout;
64
//弹出新页面显示查询结果
65
Response.Write("<script>window.open('TableDialog.aspx" + argval + "', '" + randout.ToString() + "', 'dependent=yes ,width=400, height=200, status=no, toolbar=no, menubar=no, location=no, resizable=yes, scrollbars=yes'); </script>");
66
}
67
}
2.新建TableDialog.aspx页面用来作为弹出页面显示查询结果,在html里面添加一个<div id="datadiv" runat="server"></div>用来显示查询内容。
2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

3.接下来编写 TableDialog.aspx的Page_Load事件,进行查询内容的显示,具体代码和说明如下:
1
protected void Page_Load(object sender, EventArgs e)
2
{
3
string id = Request.QueryString["id"];
4
DataTable dt = (DataTable)Session["dt" + id];
5
if (dt != null)
6
{
7
System.Web.UI.HtmlControls.HtmlForm htmlform = (System.Web.UI.HtmlControls.HtmlForm)Page.FindControl("form1");
8
Control controldiv = htmlform.FindControl("datadiv");
9
10
GridView gd = new GridView();
11
gd.DataSource = dt;
12
gd.DataBind();
13
gd.Visible = true;
14
gd.BorderWidth = 10;
15
controldiv.Controls.Add(gd);
16
}
17
}
4.这样就可以运行查看效果了,这个例子比较简单了。
2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

