Отображение данных в DataGrid при помощи LINQ и WCF в Silverlight - Создание приложения Silverlight
ОГЛАВЛЕНИЕ
Создание приложения Silverlight
Следующим шагом будет создание приложения Silverlight , которое будет взаимодействовать с веб-сервисом. Для этого, щелкните правой кнопкой мыши по ссылкам в проекте Silverlight и выберите Add Service Reference (добавить ссылку на сервис)
Рис. 3-13. Добавление ссылки на веб-сервис
Когда появится Add Service Reference нажмите на Discover и выберите Services in Solution. Сервис который вы создали будет найден. До нажатия на OK обратите внимание на Service, оперцию , которую вы создали (GetCustoemrByLastName будет найдена
Рис. 3-14. Выбор тех операций, которые необходимо добавить (Add)
Нажав на OK вы добавляете сервис в ваш проект. Вы сможете осуществить доступ к веб-сервисе (и его метод) через его ссылку.
Рис. 3-15. Сссылка добавлена в ваш проект
Создание XAML
В Page.xaml я создал очень простой пользовательский интерфейс , который состоит из верхней строки для ввода фамилии пользователя и нижней строки для отображения результатов. Для начала, я расположу строки и колонки элемента Grid:
<Grid x:Name="LayoutRoot" Background="White" ShowGridLines="True">
<Grid.RowDefinitions>
<RowDefinition Height="10" /> <!--0 Margin-->
<RowDefinition Height="50" /> <!--1 Prompts-->
<RowDefinition Height="*" /> <!--2 DataGrid-->
<RowDefinition Height="10" /> <!--3 Margin-->
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="10" /> <!--0 Margin-->
<ColumnDefinition Width="*" /> <!--1 Controls-->
<ColumnDefinition Width="10" /> <!--2 Margin-->
</Grid.ColumnDefinitions>
</Grid>
Обратите внимание на то, что я установил ShowGridLines в значение True во время работы для того чтобы обеспечить себе факт получения ожидаемых результатов, а также посмотрите на то, что третья строка и вторая колонка используют звездочку для определения размера - это означает, что они должны занимать все оставшееся пространство.
Grid имеет небольшие отступы со всех сторон и две строки - верхнюю и нижнюю:
Рис. 3-16. Табличная сетка в режиме дизайнера (design mode)
Добавляем элементы управления в верхнюю строку
Я хочу расположить Textblock (для запроса), TextBox (для ввода) и кнопку в верхней строке. Наиболее легким путем будет реализация при помощи StackPanel, и я обрамлю все рамкой для разделения всего от результатов.
<Border BorderBrush="Black" BorderThickness="2" Grid.Row="1" Grid.Column="1"/>
<StackPanel Grid.Row="1" Grid.Column="1" Orientation="Horizontal">
<TextBlock Text="Last name to search for: " VerticalAlignment="Bottom"
FontSize="18" Margin="15,0,0,0" />
<TextBox x:Name="LastName" Width="250" Height="30" Margin="2,0,0,4"
VerticalAlignment="Bottom"/>
<Button x:Name="Search" Width="75" Height="30"
Margin="20,0,0,4" Content="Search"
VerticalAlignment="Bottom" Background="Blue" FontWeight="Bold"
FontSize="14" />
</StackPanel>
Наконец, перетащите DataGrid из Toolbox на XAML.
<my:DataGrid x:Name="theDataGrid" AlternatingRowBackground="Beige" AutoGenerateColumns="True" Width="700" Height="500" Grid.Row="2" Grid.Column="1" CanUserResizeColumns="True" />
Вы заметите то, что он получил префикс my и то, что объявлено новое пространство имен для поддержки:
xmlns:my="clr-namespace:System.Windows.Controls;assembly=System.Windows.Controls.Data"
Написание обработчика события для кнопки поиска (Search)
Когда пользователь нажимает кнопку поиска нам надо получить текст в TextBox и передать его веб-сервису и получить в результате набор клиентов. Давайте настроим шаблон кода обработчика события в файле page.xaml.cs:
public Page()
{
InitializeComponent();
Loaded += new RoutedEventHandler(Page_Loaded);
}
void Page_Loaded(object sender, RoutedEventArgs e)
{
Search.Click += new RoutedEventHandler(Search_Click);
}
void Search_Click(object sender, RoutedEventArgs e)
{
}