ArcServer for Silverlight系列之属性查询

原文地址:http://hi.baidu.com/javacookies/blog/item/aef559a114d6e685461064a8.html 
 
< UserControl  x:Class ="ArcGISSilverlightSDK.Find"
    xmlns
="http://schemas.microsoft.com/winfx/2006/xaml/presentation"  
    xmlns:x
="http://schemas.microsoft.com/winfx/2006/xaml"  
    xmlns:esri
="clr-namespace:ESRI.ArcGIS.Client;assembly=ESRI.ArcGIS.Client"
    xmlns:esriSymbols
="clr-namespace:ESRI.ArcGIS.Client.Symbols;assembly=ESRI.ArcGIS.Client"
    xmlns:esriConverters
="clr-namespace:ESRI.ArcGIS.Client.ValueConverters;assembly=ESRI.ArcGIS.Client"
    xmlns:slData
="clr-namespace:System.Windows.Controls;assembly=System.Windows.Controls.Data" >
     < Grid  x:Name ="LayoutRoot"  Background ="#FF5C90B2" >
        
         < Grid .Resources >
             < esriSymbols:SimpleMarkerSymbol  x:Name ="DefaultMarkerSymbol"  Size ="8"  Color ="Red"  Style ="Circle"   />
             < esriSymbols:SimpleLineSymbol  x:Name ="DefaultLineSymbol"  Color ="Red"  Width ="6"   />
             < esriSymbols:SimpleFillSymbol  x:Name ="DefaultFillSymbol"  BorderBrush ="Red"  BorderThickness ="2"  Fill ="#50FF0000" />
             < esriConverters:DictionaryConverter  x:Name ="MyDictionaryConverter"   />
         </ Grid.Resources >
        
         < Grid .RowDefinitions >
             < RowDefinition  Height ="35"   />
             < RowDefinition  Height ="*"   />
             < RowDefinition  Height ="150"   />
         </ Grid.RowDefinitions >
         <!-- 查询条件 -->
         < Border  BorderBrush ="Black"  BorderThickness ="1" >
             < StackPanel  Orientation ="Horizontal"  Background ="#FF5C90B2"  Grid.Row ="0"  HorizontalAlignment ="Left"  VerticalAlignment ="Top"   >
                 < TextBlock  Text ="Search for"  Foreground ="Black"  
                           HorizontalAlignment
="Center"  Height ="24"  VerticalAlignment ="Center"  
                           FontWeight
="Bold"  FontSize ="12"  Margin ="20,8,5,0" />
                 < TextBox  x:Name ="FindText"  Background ="White"  Text ="River"  Height ="23"  Width ="100"  HorizontalContentAlignment ="Center"   />
                 < TextBlock  Text ="in the attributes of States or Counties:"  Foreground ="Black"  
                           HorizontalAlignment
="Center"  Height ="24"  VerticalAlignment ="Center"  
                           FontWeight
="Bold"  FontSize ="12"  Margin ="5,8,5,0" />
                 < Button  x:Name ="ExecuteButton"  Content ="Find"  Width ="75"  Height ="24"  VerticalAlignment ="Center"  Click ="ExecuteButton_Click"  
                        Margin
="5,0,5,0"  Cursor ="Hand"   />
             </ StackPanel >
         </ Border >
         <!-- 地图控件 -->
         < esri:Map  x:Name ="MyMap"  Background ="White"  Grid.Row ="1"  Extent ="-125, 25, -65, 55" >
             < esri:Map .Layers >
                 < esri:ArcGISTiledMapServiceLayer  ID ="TopoLayer"  
                    Url
="http://server.arcgisonline.com/ArcGIS/rest/services/NGS_Topo_US_2D/MapServer" />
                 < esri:ArcGISDynamicMapServiceLayer  ID ="DemographicLayer"  Opacity ="0.2"
                    Url
="http://sampleserver1.arcgisonline.com/ArcGIS/rest/services/Demographics/ESRI_Census_USA/MapServer"  VisibleLayers ="4,5"   />      
                 < esri:GraphicsLayer  ID ="MyGraphicsLayer"   />
             </ esri:Map.Layers >
         </ esri:Map >        
         <!-- 查询结果GIRD控件 -->
         < slData:DataGrid  x:Name ="FindDetailsDataGrid"  AutoGenerateColumns ="False"  HeadersVisibility ="All"  Background ="White"  
                         BorderBrush
="Black"  BorderThickness ="1"  SelectionChanged ="FindDetails_SelectionChanged"  
                         HorizontalAlignment
="Left"  HorizontalScrollBarVisibility ="Hidden"  Grid.Row ="2"  Width ="Auto"
                         IsReadOnly
="True" >
             < slData:DataGrid .Columns >
                 < slData:DataGridTextColumn  Width ="65"  Binding ="{Binding Path=LayerId}"  Header ="Layer ID"   />
                 < slData:DataGridTextColumn  Width ="90"  Binding ="{Binding Path=LayerName}"  Header ="Layer Name" />
                 < slData:DataGridTextColumn  Width ="80"  Binding ="{Binding Path=FoundFieldName}"  Header ="Found Field"   />
                 < slData:DataGridTextColumn  Width ="80"  Binding ="{Binding Path=Value}"  Header ="Value" />
                 < slData:DataGridTextColumn  Width ="120"  Binding ="{Binding Converter={StaticResource MyDictionaryConverter},
                    ConverterParameter=STATE_NAME, Mode=OneWay, Path=Feature.Attributes}"
 Header ="State Name" />
             </ slData:DataGrid.Columns >
         </ slData:DataGrid >        
     </ Grid >
</ UserControl > 

 using System.Windows;

using System.Windows.Controls;
using System.Windows.Data;
using ESRI.ArcGIS.Client;
using ESRI.ArcGIS.Client.Tasks;

namespace ArcGISSilverlightSDK
{
     public  partial  class Find : UserControl
    {
         public Find()
        {
            InitializeComponent();
        }
// 查询
         private  void ExecuteButton_Click( object sender, RoutedEventArgs e)
        {
            GraphicsLayer graphicsLayer = MyMap.Layers[ " MyGraphicsLayer "as GraphicsLayer;
            graphicsLayer.ClearGraphics();

            FindTask findTask =  new FindTask( " http://sampleserver1.arcgisonline.com/ArcGIS/rest/services/ " +
                 " Demographics/ESRI_Census_USA/MapServer ");
            findTask.Failed += FindTask_Failed;

            FindParameters findParameters =  new FindParameters();
             //  查询的层列表
            findParameters.LayerIds.AddRange( new  int[] {  35 });
             //  查询的字段列表
            findParameters.SearchFields.AddRange( new  string[] {  " NAME "" STATE_NAME "" STATE_ABBR "" TRACT "" BLOCK "" BLKGRP " });

             //  绑定查询结果到GRID 
            Binding resultFeaturesBinding =  new Binding( " LastResult ");
            resultFeaturesBinding.Source = findTask;
            FindDetailsDataGrid.SetBinding(DataGrid.ItemsSourceProperty, resultFeaturesBinding);
      // 查询条件
            findParameters.SearchText = FindText.Text;
             // 执行查询
            findTask.ExecuteAsync(findParameters);
        }
         private  void FindDetails_SelectionChanged( object sender, SelectionChangedEventArgs e)
        {
             // 高亮显示被选中记录对应的图元
            DataGrid dataGrid = sender  as DataGrid;
             int selectedIndex = dataGrid.SelectedIndex;
             if (selectedIndex > - 1)
            {
                FindResult findResult = (FindResult)FindDetailsDataGrid.SelectedItem;
                Graphic graphic = findResult.Feature;
                 switch (graphic.Attributes[ " Shape "].ToString())
                {
                     case  " Polygon ":
                        graphic.Symbol = DefaultFillSymbol;
                         break;
                     case  " Polyline ":
                        graphic.Symbol = DefaultLineSymbol;
                         break;
                     case  " Point ":
                        graphic.Symbol = DefaultMarkerSymbol;
                         break;
                }
                GraphicsLayer graphicsLayer = MyMap.Layers[ " MyGraphicsLayer "as GraphicsLayer;
                graphicsLayer.ClearGraphics();
                graphicsLayer.Graphics.Add(graphic);
            }
        }

         private  void FindTask_Failed( object sender, TaskFailedEventArgs args)
        {
            MessageBox.Show( " Find failed:  " + args.Error.Message);
        }
    }
}

你可能感兴趣的:(silverlight)