Поделиться через


Привязка элементов управления WPF к набору данных в платформа .NET Framework приложениях

Примечание.

Наборы данных и связанные классы являются устаревшими технологиями платформа .NET Framework с начала 2000-х годов, которые позволяют приложениям работать с данными в памяти во время отключения приложений от базы данных. Технологии особенно полезны для приложений, которые позволяют пользователям изменять данные и сохранять изменения обратно в базу данных. Хотя наборы данных оказались очень успешными, мы рекомендуем новым приложениям .NET использовать Entity Framework Core. Entity Framework предоставляет более естественный способ работы с табличными данными в виде объектных моделей, и он имеет более простой интерфейс программирования.

В этом пошаговом руководстве вы создадите приложение WPF, содержащее элементы управления с привязкой к данным. Эти элементы управления привязаны к записям продуктов, инкапсулированным в набор данных. Вы также добавляете кнопки для просмотра продуктов и сохранения изменений в записях продуктов.

В этом пошаговом руководстве рассматриваются следующие задачи:

  • Создание приложения WPF и набора данных, сформированного из данных в учебной базе данных AdventureWorksLT.

  • Создание набора привязанных к данным элементов управления посредством перетаскивания таблицы данных из окна Источники данных в окно в конструкторе WPF.

  • Создание кнопок для перехода вперед и назад по записям продуктов.

  • Создание кнопки для сохранения изменений, вносимых пользователем в записи продуктов, в таблице данных и базовом источнике данных.

Примечание.

Отображаемые на компьютере имена или расположения некоторых элементов пользовательского интерфейса Visual Studio могут отличаться от указанных в этой статье. Возможно, вы используете другой выпуск Visual Studio или разные параметры среды. Дополнительные сведения см. в разделе Персонализация среды IDE.

Необходимые компоненты

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

  • Чтобы завершить работу с этим руководством, вам потребуется разработка классических приложений .NET и рабочие нагрузки хранения и обработки данных, установленные в Visual Studio. Чтобы установить их, откройте Visual Studio Installer и нажмите кнопку "Изменить" (или "Изменить>") рядом с версией Visual Studio, которую вы хотите изменить. См. раздел Изменение Visual Studio.

  • Доступ к запущенному экземпляру SQL Server или SQL Server Express с примером базы данных AdventureWorks Light (AdventureWorksLT), подключенной к ней. Чтобы скачать базу данных, см . примеры баз данных AdventureWorks.

Перед изучением приведенных ниже концепций будет полезно, хотя и не обязательно, ознакомиться со следующим пошаговым руководством.

Создание проекта

Создайте проект WPF для отображения записей продуктов.

  1. Откройте Visual Studio.

  2. На начальном экране выберите Создать проект.

  3. Найдите шаблон проекта приложения WPF на C# и выполните действия по созданию проекта, именуя проект AdventureWorksProductsEditor.

    Visual Studio создает проект AdventureWorksProductsEditor.

Создание набора данных для приложения

Перед созданием элементов управления с привязкой к данным нужно определить модель данных для своего приложения и добавить ее в окно Источники данных. В данном пошаговом руководстве вы создадите набор данных для использования в качестве модели данных.

  1. В меню Данные выберите команду Показать источники данных.

    Открывается окно Источники данных.

  2. В окне Источники данных выберите Добавить новый источник данных.

    Открывается мастер настройки источника данных.

  3. На странице "Выбор типа источника данных" выберите "База данных" и нажмите кнопку "Далее".

  4. На странице "Выбор модели базы данных" выберите набор данных и нажмите кнопку "Далее".

  5. На странице Выбор подключения к базе данных выберите один из следующих параметров:

    • Если подключение к образцу базы данных AdventureWorksLT доступно в раскрывающемся списке, выберите его и нажмите кнопку "Далее".

    • Щелкните Создать подключение и создайте подключение к базе данных AdventureWorksLT.

  6. На странице "Сохранить строку подключения" на странице "Настройка файла приложения" выберите "Да", сохраните подключение в качестве флажка и нажмите кнопку "Далее".

  7. На странице Выбор объектов базы данных разверните узел Таблицы и выберите таблицу Продукт (SalesLT).

  8. Нажмите кнопку Готово.

    Visual Studio добавляет новый AdventureWorksLTDataSet.xsd файл в проект и добавляет соответствующий элемент AdventureWorksLTDataSet в окно "Источники данных". Файл AdventureWorksLTDataSet.xsd определяет типизированный набор данных с именем AdventureWorksLTDataSet и именем ProductTableAdapterTableAdapter. Позднее в рамках данного пошагового руководства вы воспользуетесь ProductTableAdapter для заполнения набора данных данными и сохранения изменений в базу данных.

  9. Выполните сборку проекта.

Изменение метода заполнения по умолчанию tableAdapter

Чтобы заполнить набор данных данными, используйте метод Fill объекта ProductTableAdapter. По умолчанию метод Fill заполняет ProductDataTable в AdventureWorksLTDataSet со всеми строками данных из таблицы продукта. Вы можете изменить этот метод, чтобы он возвращал только подмножество строк. В рамках данного руководства измените метод Fill для возврата только строк для продуктов с фотографиями.

  1. В обозревателе решений дважды щелкните файл AdventureWorksLTDataSet.xsd.

    Открывается Конструктор наборов данных.

  2. В этом конструкторе щелкните запрос Fill, GetData() правой кнопкой мыши и выберите пункт Настроить.

    Открывается Мастер настройки адаптера таблицы.

  3. На странице "Ввод инструкции SQL" добавьте следующее WHERE предложение после SELECT инструкции в текстовом поле.

    WHERE ThumbnailPhotoFileName <> 'no_image_available_small.gif'
    
  4. Нажмите кнопку Готово.

Определение пользовательского интерфейса

Добавьте несколько кнопок в окно, изменив в XAML в Конструкторе WPF. Позднее в рамках данного пошагового руководства вы добавите код, позволяющий пользователям выполнять прокрутку и сохранять изменения записей продуктов с помощью этих кнопок.

  1. В обозревателе решений дважды щелкните файл MainWindow.xaml.

    Окно открывается в конструкторе WPF.

  2. В представлении XAML конструктора добавьте следующий код между тегами <Grid> :

    <Grid.RowDefinitions>
        <RowDefinition Height="75" />
        <RowDefinition Height="625" />
    </Grid.RowDefinitions>
    <Button HorizontalAlignment="Left" Margin="22,20,0,24" Name="backButton" Width="75">&lt;</Button>
    <Button HorizontalAlignment="Left" Margin="116,20,0,24" Name="nextButton" Width="75">&gt;</Button>
    <Button HorizontalAlignment="Right" Margin="0,21,46,24" Name="saveButton" Width="110">Save changes</Button>
    
  3. Выполните сборку проекта.

Создание элементов управления с привязкой к данным

Создайте элементы управления, отображающие записи клиентов, перетаскивая таблицу Product из окна источников данных в конструктор WPF.

  1. В окне "Источники данных" щелкните раскрывающееся меню узла "Продукт" и выберите "Сведения".

  2. Разверните узел Product.

  3. В этом примере некоторые поля не будут отображаться, поэтому щелкните раскрывающееся меню рядом со следующими узлами и выберите "Нет".

    • ИДКатегорииПродукта

    • ИДМоделиПродукта

    • ThumbnailPhotoFileName

    • rowguid

    • ModifiedDate

  4. Щелкните раскрывающееся меню рядом с узлом ThumbNailPhoto и выберите "Изображение".

    Примечание.

    По умолчанию у элементов в окне Источники данных, представляющих изображения, для элемента управления по умолчанию задано значение Нет. Это вызвано тем, что изображения хранятся в базах данных в виде байтовых массивов, которые могут содержать все — от простого массива байтов до исполняемого файла или большого приложения.

  5. Из окна Источники данных перетащите узел Product на строку сетки под строкой с кнопками.

    Visual Studio создает XAML, который определяет набор элементов управления, привязанных к данным в таблице Products. Также создается код, который загружает эти данные. Дополнительные сведения о созданном XAML и коде см. в разделе Привязка элементов управления WPF к данным в Visual Studio.

  6. Щелкните в конструкторе текстовое поле рядом с меткой Идентификатор продукта.

  7. В окне "Свойства" установите флажок рядом со свойством IsReadOnly.

Добавьте код, позволяющий пользователям выполнять прокрутку записей продуктов с помощью кнопок < и >.

  1. В конструкторе дважды щелкните кнопку < на поверхности окна.

    Visual Studio открывает файл кода программной части и создает обработчик событий backButton_Click для события Click.

  2. Измените обработчик событий Window_Loaded, чтобы ProductViewSource, AdventureWorksLTDataSet и AdventureWorksLTDataSetProductTableAdapter находились за рамками метода и были доступны всей форме. Объявите их только для глобальной формы и назначьте их в обработчике Window_Loaded событий следующим образом:

    private AdventureWorksProductsEditor.AdventureWorksLTDataSet AdventureWorksLTDataSet;
    private AdventureWorksProductsEditor.AdventureWorksLTDataSetTableAdapters.ProductTableAdapter adventureWorksLTDataSetProductTableAdapter;
    private System.Windows.Data.CollectionViewSource productViewSource;
    
    private void Window_Loaded(object sender, RoutedEventArgs e)
    {
        AdventureWorksLTDataSet = ((AdventureWorksProductsEditor.AdventureWorksLTDataSet)(this.FindResource("adventureWorksLTDataSet")));
        // Load data into the table Product. You can modify this code as needed.
        adventureWorksLTDataSetProductTableAdapter = new AdventureWorksProductsEditor.AdventureWorksLTDataSetTableAdapters.ProductTableAdapter();
        adventureWorksLTDataSetProductTableAdapter.Fill(AdventureWorksLTDataSet.Product);
        productViewSource = ((System.Windows.Data.CollectionViewSource)(this.FindResource("productViewSource")));
        productViewSource.View.MoveCurrentToFirst();
    }
    
  3. Добавьте следующий код в обработчик событий backButton_Click .

    if (productViewSource.View.CurrentPosition > 0)
    {
        productViewSource.View.MoveCurrentToPrevious();
    }
    
  4. Вернитесь в конструктор и дважды щелкните кнопку >.

  5. Добавьте следующий код в обработчик событий nextButton_Click .

    if (productViewSource.View.CurrentPosition < ((CollectionView)productViewSource.View).Count - 1)
    {
        productViewSource.View.MoveCurrentToNext();
    }
    

Сохранение изменений в записях продукта

Добавьте код, позволяющий пользователям сохранять изменения в записях продуктов с помощью кнопки Сохранить изменения.

  1. В конструкторе дважды щелкните кнопку Сохранить изменения.

    Visual Studio открывает файл кода программной части и создает обработчик событий saveButton_Click для события Click.

  2. Добавьте следующий код в обработчик событий saveButton_Click .

    adventureWorksLTDataSetProductTableAdapter.Update(AdventureWorksLTDataSet.Product);
    

    Примечание.

    В этом примере для сохранения изменений используется метод Save объекта TableAdapter. В данном пошаговом руководстве это целесообразно, так как изменяется только одна таблица данных. Если необходимо сохранить изменения нескольких таблиц, можно воспользоваться методом UpdateAll объекта TableAdapterManager, который Visual Studio создает вместе с вашим набором данных. Дополнительные сведения см. в разделе TableAdapters.

Тестирование приложения

Выполните сборку приложения и запустите его. Убедитесь, что вы можете просмотреть и обновить записи продуктов.

  1. Нажмите клавишу F5.

    Выполняется сборка и запуск приложения. Проверьте выполнение следующих условий.

    • Текстовые поля отображают данные из первой записи продукта с фотографией. Этот продукт имеет идентификатор 713 и имя Long-Sleeve Logo Jersey, S.

    • Вы можете нажать кнопку > или < для перехода по другим записям продуктов.

  2. В одной из записей продукта измените значение "Размер ", а затем нажмите кнопку "Сохранить изменения".

  3. Закройте приложение и перезапустите его, нажав клавишу F5 в Visual Studio.

  4. Перейдите к измененной записи продукта и убедитесь, что изменения сохранены.

  5. Закройте приложение.

Следующие шаги

После выполнения этого пошагового руководства можно попробовать следующие связанные задачи: