Опубликован: 01.03.2010 | Доступ: свободный | Студентов: 958 / 46 | Оценка: 4.38 / 4.31 | Длительность: 09:26:00
Дополнительный материал 1:

Практикум

< Лекция 7 || Дополнительный материал 1: 12345678910111213

Постраничный вывод

Теперь добавим элемент, который будет осуществлять Paging, т.е. постраничный вывод данных, разбитие их на страницы. Для этого служит элемент DataPager. Добавляем его на страницу:

<data:DataPager
    Source="{Binding Data, ElementName=ProductsData}"                        
    PageSize="10"

Привязываем этот элемент к данным ProductsData, так же как привязывали данные к DataGrid.

Группировка

Теперь добавим возможность группировки данных. Это можно сделать в коде:

public MainPage()
{
    InitializeComponent();
    ProductsData.GroupDescriptors.Add(new GroupDescriptor("Color"));
}

Можно в описании xaml, добавив как свойство GroupDescriptor из набора GroupDescriptors источника данных:

<ria:DomainDataSource 
 …
    <ria:DomainDataSource.GroupDescriptors>
        < riaData:GroupDescriptor PropertyPath="Color"/>            
    </ria:DomainDataSource.GroupDescriptors>
</ria:DomainDataSource>

Полей для группировки может быть несколько:

<riaData:GroupDescriptor PropertyPath="ProductLine"/>
<riaData:GroupDescriptor PropertyPath="Color"/>

ProductsData.GroupDescriptors.Add(new GroupDescriptor("ProductLine"));
ProductsData.GroupDescriptors.Add(new GroupDescriptor("Color"));

Это будет выглядеть так:

Группировка строк в DataGrid

увеличить изображение
Рис. P.28. Группировка строк в DataGrid

Фильтрация

Добавим на страницу xaml поле для ввода фильтра FilterText:

<TextBlock Text="Filter Name:"/>
<TextBox x:Name="FilterText" TextChanged="FilterText_TextChanged"/>

В описание источника данных добавляем описание фильтра:

<ria:DomainDataSource 
    <ria:DomainDataSource.FilterDescriptors>
        <riaData:FilterDescriptorCollection>
            <riaData:FilterDescriptor 
                PropertyPath="Name" 
                Operator="Contains">
                <riaData:ControlParameter 
                    ControlName="Filter" 
                    PropertyName="Text" 
                    RefreshEventName="TextChanged" />
            </riaData:FilterDescriptor>
        </riaData:FilterDescriptorCollection>
    </ria:DomainDataSource.FilterDescriptors>
</ria:DomainDataSource>

Обратите внимание на атрибут Operator. RIA сервисы предлагают дополнительные условия фильтрации:

Условия фильтрации

Рис. P.29. Условия фильтрации

Либо в коде добавляем обработчик событий:

private void FilterText_TextChanged
    (object sender, System.Windows.Controls.TextChangedEventArgs e)
{
    FilterDescriptorCollection fcollection = 
        new FilterDescriptorCollection();
    FilterDescriptor fdescr = 
        new FilterDescriptor
            ("Name", FilterOperator.Contains, FilterText.Text);
    fcollection.Add(fdescr);
    ProductsData.FilterDescriptors = fcollection;
}

Получаем работающий фильтр:

Фильтрация строк в DataGrid

увеличить изображение
Рис. P.30. Фильтрация строк в DataGrid

Теперь перейдем к изменению данных в таблице. Добавим в MainPage.xaml элемент управления DataForm:

<dataFormToolkit:DataForm 
    x:Name="productEditForm"             
    CurrentItem="{Binding 
                  ElementName=productGrid, Path=SelectedItem}"
    AutoCommit="False"
    AutoEdit="True"
    Header="Details"/>

Как видно из описания, он привязан к другому элементу productGrid, и при выборе строки SelectedItem отображает содержимое всей строки таблицы базы данных.

Получается приложение такого вида:

Детализация с помощью элемента управления DataForm

увеличить изображение
Рис. P.31. Детализация с помощью элемента управления DataForm

Изменения данных (было Blue, стало Green ) отслеживаются этим элементом. Видно появление звездочки вверху элемента, кнопки OK и отмена активизировались и появились изменения в DataGrid. После нажатия кнопки OK изменения появятся и в источнике данных и. Можно тоже самое сделать с помощью кода. Для манипуляции с данными к этому добавим панель с кнопками, код C# и изменим описание DataForm. Добавим в DataForm:

<dataFormToolkit:DataForm 
    CommandButtonsVisibility="None"

Добавим панель с кнопкой сохранения изменений:

<StackPanel Orientation="Horizontal" 
            Height="23" 
            VerticalAlignment="Bottom">
    <Button Content="Save changes" 
            Click="Button_Click"/>
</StackPanel>

И метод в код страницы:

private void Button_Click
    (object sender, RoutedEventArgs e)
{
    productEditForm.CommitEdit();
    ProductsData.SubmitChanges();
}

Для удаления строки добавим кнопку удалить со следующим описанием:

<Button Content="Delete" 
        Click="ButtonDelete_Click"/>

И код C#:

private void ButtonDelete_Click(object sender, RoutedEventArgs e)
{
    productEditForm.CommitEdit();
    productEditForm.DeleteItem();
    ProductsData.SubmitChanges();
}

Заключение

На данном практическом занятии мы рассмотрели пример работы с базой данных MS SQL 2008, с таблицами, научились делать выборку, сортировать, группировать и фильтровать строки, удалять, изменять данные таблиц, а также, оценили роль .NET RIA Services, значительно упрощающих разработку приложения Silverlight. Исходный код данного примера приведен в файле DataBase.zip.

< Лекция 7 || Дополнительный материал 1: 12345678910111213