При выполнении в лабораторной работе упражнения №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
Применение нескольких поставщиков и нескольких наборов данных
В данном разделе мы продолжим развитие проекта и добавим еще по одному дополнительному экземпляру классов OleDbDataAdapter и DataSet. Для них мы сформируем SQL-команду, которая будет выбирать из источника одну запись таблицы Customers (клиенты), соответствующую выделенному в списке ListBox конкретному клиенту по его идентификатору. Значения полей этой записи будем отображать в текстовых полях формы, маркерованных именами столбцов таблицы. Структура таблицы Customers файловой БД Northwind.mdb, открытая в Microsoft Office Access 2003, приведена на снимке
Добавление и настройка поставщика данных
- Перейдите в режим View Designer и поместите на форму еще один компонент OleDbDataAdapter с автоматически сгенерированным именем oleDbDataAdapter2
- В мастере настроек адаптера Data Adapter Configuration Wizard перейдите на вкладку Generate the SQL statements, щелкните на кнопке Advanced Options и сбросьте все флажки вкладки Advanced Options, поскольку поставщик будет только читать данные
- Щелкните на кнопке Query Builder построителя SQL-запроса, в появившемся окне выберите таблицу Customers и щелкните один раз на кнопке Add, а затем - Close
- В появившемся списке полей таблицы Customers отметьте флажки против каждого поля, из которых должен читать данные БД настраиваемый адаптер данных
- В поле Filter строки CustomerID второй секции построителя команд введите =?, после чего в третьей секции будет сгенерирована команда
SELECT CustomerID, CompanyName, ContactName, ContactTitle, Address, City, Region, PostalCode, Country, Phone, Fax FROM Customers WHERE (CustomerID = ?)
показанная на снимке
- Завершите построение запроса кнопкой OK и указанная команда окажется на текущей вкладке мастера настройки поставщика данных, который по ней будет заполнять будущий набор данных класса DataSet
- Дойдите до последней вкладки мастера настройки поставщика и убедитесь, что включен только режим Select (но не Update, Insert, Delete )
- Щелчком на кнопке Finish завершите настройку поставщика данных и обратите внимание, что в нижней части появился объект строки соединения для текущего адаптера
Теперь нужно создать связанный с поставщиком объект набора данных DataSet, который будет хранить данные таблицы Customers. Этот набор данных должен быть согласован по структуре с настройками поставщика, поэтому создадим его с помощью мастера. В панели Solution Explorer обратите внимание, что пока в приложении присутствует только один узел DataSet1.xsd, который был создан мастером на предыдущих этапах выполнения работы и который описывает класс набора данных, соответствующий хранению значений только двух полей таблицы Customers. Сейчас создадим еще один такой узел.
- Щелкните правой кнопкой мыши на объекте oleDbDataAdapter2, выполните команду Generate DataSet контекстного меню (или в Data главного меню проекта) и настройте одноименное окно мастера как показано на снимке
После щелчка на кнопке OK будет создан объект набора данных, согласованный с объектом oleDbDataAdapter2 второго поставщика данных, в обязанность которого входит поставка данных в соответствии со строкой запроса.
Изменение пользовательского интерфейса формы
Сейчас нужно изменить пользовательский интерфейс формы, разместив в клиентской области справа от списка элементы Label и TextBox с целью просмотра значений полей таблицы Customers для выделенной в списке записи.
- Измените свойство Dock списка на значение None и оформите интерфейс формы в соответствии с рисунком
На форму было помещено 11 элементов Label и 11 элементов TextBox. У текстовых меток Label в свойство текст были скопированы названия полей таблицы Customers из SQL-команды Select, приведенной выше. Свойство AutoSize элементов Label было установлено в false, а свойство TextAlign - в значение MiddleRight. После выравнивания элементов на форме с помощью панели инструментов Layout они были выделены и зафиксированы командой Format/Lock Controls, чтобы случайно не нарушить пользовательский интерфейс формы. Такого же самого эффекта можно достигнуть, если установить свойство Locked всех элементов в значение true.
Здесь необязательно, но для ручного программирования было бы удобнее, присвоить объектам текстовых полей осмысленные имена, поэтому, если хотите, выполните следующее действие:
- Выделите последовательно все добавленные элементы TextBox и присвойте им значение свойства (Name) равное именам столбцов таблицы Customers с префиксом txt, например, первый элемент будет txtCustomerID, второй - txtCompanyName, и т.д.