|
При выполнении в лабораторной работе упражнения №1 , а именно при выполнении нижеследующего кода: using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; using Microsoft.Xna.Framework.Graphics;
namespace Application1 { public partial class MainForm : Form { // Объявим поле графического устройства для видимости в методах GraphicsDevice device;
public MainForm() { InitializeComponent();
// Подпишемся на событие Load формы this.Load += new EventHandler(MainForm_Load);
// Попишемся на событие FormClosed формы this.FormClosed += new FormClosedEventHandler(MainForm_FormClosed); }
void MainForm_FormClosed(object sender, FormClosedEventArgs e) { // Удаляем (освобождаем) устройство device.Dispose(); // На всякий случай присваиваем ссылке на устройство значение null device = null; }
void MainForm_Load(object sender, EventArgs e) { // Создаем объект представления для настройки графического устройства PresentationParameters presentParams = new PresentationParameters(); // Настраиваем объект представления через его свойства presentParams.IsFullScreen = false; // Включаем оконный режим presentParams.BackBufferCount = 1; // Включаем задний буфер // для двойной буферизации // Переключение переднего и заднего буферов // должно осуществляться с максимальной эффективностью presentParams.SwapEffect = SwapEffect.Discard; // Устанавливаем размеры заднего буфера по клиентской области окна формы presentParams.BackBufferWidth = this.ClientSize.Width; presentParams.BackBufferHeight = this.ClientSize.Height;
// Создадим графическое устройство с заданными настройками device = new GraphicsDevice(GraphicsAdapter.DefaultAdapter, DeviceType.Hardware, this.Handle, presentParams); }
protected override void OnPaint(PaintEventArgs e) { device.Clear(Microsoft.Xna.Framework.Graphics.Color.CornflowerBlue);
base.OnPaint(e); } } } Выбрасывается исключение: Невозможно загрузить файл или сборку "Microsoft.Xna.Framework, Version=3.0.0.0, Culture=neutral, PublicKeyToken=6d5c3888ef60e27d" или один из зависимых от них компонентов. Не удается найти указанный файл. Делаю все пунктуально. В чем может быть проблема? |
Разработка приложений ADO.NET для OLE DB
Упражнение 2. Связывание данных с элементами управления ComboBox и DataGrid
Продолжим работу на примере готовой БД Northwind. В этом упражнении создадим проект, в котором содержимое поля CompanyName таблицы Customers (заказчики) будем загружать в раскрывающийся список ComboBox, а при выборе определенного элемента списка связанные с соответствующей записью данные другой таблицы ( Orders - заказы) будем отображать пользователю в элементе управления DataGrid.
Отображение данных на одной форме
Для двух разных таблиц нам понадобятся два поставщика OleDbDataAdapter и два набора данных DataSet. Элементы управления ComboBox и DataGrid свяжем с наборами данных через их свойство DataSource. Для ComboBox нужно дополнительно еще связать свойства DisplayMember и ValueMember с соответствующими полями ( CompanyName и CustomerID ) подключенной таблицы Customers, а для DataGrid указать таблицу Orders в свойстве DataMember.
При выборе пользователем элемента списка значение CustomerID будет передаваться как параметр в команду поставщика данных, связанного с таблицей Orders, который загрузит из БД в набор нужные записи для отображения их в DataGrid. Если пользователь редактировал данные в DataGrid, то при смене записи в ComboBox эти данные нужно сохранить в БД. Для этого нужно создать соответствующую SQL-команду для поставщика. Итак, приступим.
-
Добавьте к решению
командой Add/New Project новый проект типа Windows Forms Application с
именем FormsADO2, а прежний проект FormsADO исключите
из решения командой Remove
-
Поместите в рабочую
область оболочки компонент OleDbDataAdapter, соедините его с файлом Northwind.mdb БД
из прилагаемого каталога Source (на предложение оболочки скопировать
файл БД в проект ответьте Да ) и настройте его только на чтение полей CustomerID и CompanyName таблицы Customers (заказчики),
используя построитель Query Builder, как это мы делали ранее
в предыдущем упражнении
-
Выделите поставщик oleDbDataAdapter1 и
командой меню Data/Generate Dataset создайте для него класс DataSet1 и
объект набора данных с автоматически сгенерированным именем dataSet11
-
Поместите на форму
новый поставщик OleDbDataAdapter с именем oleDbDataAdapter2 для
таблицы Orders (заказы),
в его настройках учтите все возможности взаимодействия с данными, а в команде SELECT предусмотрите передачу значения параметра по полю CustomerID и
сортировку по дате выбранных из БД данных. Для правильного формирования команды
используйте окно Query
Builder
Обратите внимание, как в каком порядке мы вызуально формируем в мастере Query Builder условие выборки по параметру CustomerID: вначале отмечаем поле CustomerID в верхней вкладке Orders окна мастера, чтобы это поле появилось во второй вкладке, далее прописываем фильтр =?, а затем в этой же второй вкладке снимаем флажок Output со столбца CustomerID, чтобы не включать его данные поставщиком.
-
Выделите поставщик oleDbDataAdapter2 и
командой меню Data/Generate Dataset создайте для него класс DataSet2 и
объект набора данных с автоматически сгенерированным именем dataSet21
-
Поместите на форму
компоненты Label, ComboBox и DataGrid (если их нет в
палитре Toolbox, добавьте к соответствующей вкладке командой контекстного
меню Choose Items ), разместите их в соответствии с рисунком и настройте
согласно приведенной таблице свойств
| Компонент | Свойство | Значение |
|---|---|---|
| Label | Text | Заказчики |
| ComboBox | (Name) | cbCustomers |
| DataSource | dataSet11 | |
| DisplayMember | Customers.CompanyName | |
| ValueMember | Customers.CustomerID | |
| DataGrid | (Name) | dgOrders |
| DataSource | dataSet21 | |
| DataMember | Orders | |
| CaptionText | Заказы для выбранного заказчика |
-
Создайте для формы Form1 обработчик
события Load, а для ComboBox - обработчик события SelectedIndexChanged,
которые заполните так
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
namespace FormsADO2
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
// Заполнить dataSet11 и связанный с ним ComboBox
// данными таблицы Customers - Заказчики
oleDbDataAdapter1.Fill(dataSet11);
// Заполнить dataSet21 и связанный с ним DataGrid данными
// таблицы Orders - Заказы для выбранного Заказчика
RefreshOrders();
}
private void RefreshOrders()
{
// Заполнить dataSet21 и связанный с ним DataGrid данными
// таблицы Orders - Заказы для выбранного Заказчика
dataSet21.Clear();
// Если выбран Заказчик в ComboBox
if (cbCustomers.SelectedIndex != -1)
{
oleDbDataAdapter2.SelectCommand.Parameters[0].Value =
cbCustomers.SelectedValue;
oleDbDataAdapter2.Fill(dataSet21);
}
}
private void cbCustomers_SelectedIndexChanged(object sender, EventArgs e)
{
// Заполнить dataSet21 и связанный с ним DataGrid данными
// таблицы Orders - Заказы для выбранного Заказчика
RefreshOrders();
}
}
}-
Запустите проект FormsADO2 и
испытайте работу приложения











