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


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

Замечание

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

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

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

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

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

  • Создание кнопок, которые перемещаются вперед и назад по записям о продукте.

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

Замечание

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

Предпосылки

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

  • Чтобы пройти это руководство, вам потребуются рабочие компоненты для разработки приложений для настольных ПК на .NET и хранения и обработки данных, установленные в Visual Studio. Чтобы установить их, откройте Установщик Visual Studio и выберите Изменить (или Дополнительно>Изменить) рядом с версией 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. На странице "Выбор объектов базы данных" разверните таблицы и выберите таблицу Product (SalesLT).

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

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

  9. Создайте проект.

Редактирование метода заполнения по умолчанию для TableAdapter

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

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

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

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

    Откроется мастер настройки TableAdapter .

  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. В этом примере некоторые поля не будут отображаться, поэтому щелкните раскрывающееся меню рядом со следующими узлами и выберите "Нет".

    • ProductCategoryID

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

    • ИмяФайлаЭскизаФото

    • rowguid

    • Дата изменения

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

    Замечание

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

  5. В окне источников данных перетащите узел Product в строку сетки под строкой, содержащей кнопки.

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

  6. В конструкторе щелкните текстовое поле рядом с меткой Product ID.

  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 Логотип Джерси, S.

    • Вы можете щелкнуть кнопки > или <, чтобы перейти к другим записям продукта.

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

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

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

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

Дальнейшие шаги

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