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);
        }
    }
}
posted @ 2012-05-17 14:46  Merray  Views(1368)  Comments(0Edit  收藏  举报