· В любом из cs-файлов проекта найдите строку namespace StudentsOleDb. Поставьте фокус на StudentsOleDb, вызовите контекстное меню и выберите команду Refactor®Rename. Замените имя пространства имен на OleDbOneTable и нажмте OK.
· Запустите проект (Ctrl+F5) и убедитесь, что приложение работает так же, как и ранее.
· Закройте решение (команда File®Close Solution) и согласитесь с тем, что надо создать и сохранить файл решения (OleDbOneTable.sln). Аккуратно выберите его местоположение (внутри папки решения, не проекта).
Теперь продолжим работу с оригиналом — проектом StudentsOleDb.
· Откройте старое решение StudentsOleDb (оригинал).
· Уберите весь код последних опытов работы с DataRowVersion и DataViewRowState.
· Переименуйте второй, вспомогательный DataGridView (gridChange) в gridExam.
· Добавьте в навигатор кнопку btnReject для отмены изменений и установите для нее свойство Text = "Cancel Changes", а также свойство Image (рекомендую отыскать изображение Edit_UndoHS.png).
· Существующие элементы DataGridView вложены в панели SplitContainer. Если вы захотите вставить еще один DataGridView, то целесообразно вставить дополнительный SplitContainer. Это потребует некоторых усилий, но даст полезный опыт работы с дизайнером студии. Аккуратно работайте со свойством Dock.
DataSet — полностью отсоединенный от источника данных контейнер (в отличие от Recordset из технологии ADO). В связи с этим он не нуждается в поддержке понятия текущая запись (курсор таблицы). Все записи в наборе данных доступны. Так как понятие курсора отсутствует, то в классе DataTable нет свойства или метода, которые позволили бы получить ссылку на текущую запись или переместиться от одной записи к другой. Это сбивает с толку программистов, привыкших работать с ADO, где поддерживается указатель текущей записи и есть методы навигации по записям. У меня (думаю, что и у вас) такой проблемы не было, так как не было опыта и навыков работы с ADO.
В общем каркасе .NET Framework и классах из пространства имен System.Windows.Forms существует и функционирует множество объектов — синхронизаторов текущей позиции. Они поддержаны классами: CurrencyManager и PropertyManager и являются частью механизма DataBinding. Важно научиться пользоваться их услугами. Синхронизатор типа CurrencyManager (или его класс-обертка — BindingSource) восполняет указанный пробел (отсутствие понятия курсора таблицы базы данных). В первой части курса мы уже работали с двумя объектами BindingSource. Сейчас мы вновь задействуем эти объекты.
· Проверьте поля данных класса MainForm, и добавьте необходимые переменные, если они отсутствуют.
string dbPath;
DataSet ds;
OleDbConnection cn;
OleDbDataAdapter da;
BindingSource bsStuds, bsExams;
· В момент начальной загрузки формы выполните следующие действия.
void MainForm_Load(object sender, EventArgs e)
{
try
{
cn = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" +
FindAFile("\\Students.mdb"));
ConnectAndRead();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, Text);
Application.Exit();
return;
}
}
Для создания объекта DbConnection необходимо точно указать файловый путь к MDB-файлу с базой данных. Метод FindAFile помогает отыскать этот файл. Такое решение (отсутствие жестко заданного пути к базе данных) упрощает перенос проекта с компьютера на компьютер. Поиск начинается с папки, где расположен исполняемый модуль (Environment.CurrentDirectory), продолжается вверх по иерархии файлового дерева, вплоть до корневой директории диска. Если и там файл не обнаружен, то выбрасывается исключение. Класс Path из пространства имен System.IO имеет ряд полезных, статических методов, которые должны быть в арсенале программиста.
string FindAFile(string file)
{
dbPath = Environment.CurrentDirectory;
string root = Path.GetPathRoot(dbPath);
while (true)
{
string data = dbPath + "\\Data",
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.