Введение в ADO.NET. Источник данных - XML-файл. Отображение данных связанной таблицы, страница 3

¨  Добавьте в ToolStrip элемент типа ToolStripLabel и установите свойства: (Name)=sFind, Text=Find.

¨  Добавьте выпадающий список (элемент ToolStripComboBox). Он будет помнить искомые строки текста. Присвойте ему имя: comboFind.

¨  Положите на форму элемент типа DataGridView (он расположен на вкладке Data панели Toolbox). Идентифицируйте его (см. поле Name окна свойств) именем studsGrid.

¨  Положите на форму элемент типа StatusStrip c именем status. В коллекцию дочерних элементов StatusStrip добавьте элемент типа ToolStripStatusLabel c именем statusMsg.

В планку статуса (точнее, ее метку statusMsg) мы будем выводить сообщения. Например, при нажатии кнрпки btnFindNext мы собираемся осуществить поиск заданного текста в текущей колонке DataGridView (или колонке DataTable в памяти). Если текст не найден, то в строке статуса появится сообщение Not Found. Искомый текст пользователь вводит, или выбирает в окне выпадающего списка comboFind.

Для удобства пользования кнопками панели инструментов установите свойства Text и ToolTipText в значения: Open, Save и FindNext. Измените значения свойств Image (сами изображения для кнопок), нажмите кнопку Import и импортируйте картинку из вашей любимой папки с картинакми (такую пора завести) или папки со стандартными изображениями, которая поставляется вместе со студией:

C:\Program Files\Microsoft Visual Studio 8\Common7\VS2005ImageLibrary\..

Реакции на нажатие новых кнопок (делегаты с заданиями) вы можете создать двумя разными способами.

¨  Методом двойного щелчка по кнопкам toolStrip вы создаете стандартные методы (типа button_Clicked).

¨  Выбрав в окне Properties для toolStrip событие ItemClicked, вы создаете один метод, реагирующий на все кнопки. Второй параметр этого метода несет информацию о нажатой кнопке (или другой сущности из коллекции ToolStripItemCollection).

Рассмотрим второй способ. Код обработчика события (toolStrip_ItemClicked) имеет стандартную структуру, которая использовалась и  ранее (при работе с Toolbar).

void toolStrip_ItemClicked(object sender, ToolStripItemClickedEventArgs e)

{

  switch (e.ClickedItem.Text)

  {

    case "Open": Open(FileDlg(true)); break;

    case "Save": Save(FileDlg(false)); break;

    case "FindNext": Find(); break;

  }

}

Вызываемые методы предстоит создать. Механизм Intellisense рвется в бой и предлагает создать временные заглушки для отсутствующих методов. Позвольте ему это сделать. В дополнение к данным, которые были сгенерированы дизайнером студии, вручную введите в класс формы объявления нескольких переменных. Добавьте в класс объявление объекта ds класса DataSet. Мы собираемся запомнить имя открытого файла в переменной fileName, поэтому добавьте переменную с таким именем и инициализируйте ее в конструкторе.

public MainForm()

{

  InitializeComponent();

  InitDataSet();

  fileName = "Studs.xml";  // Имя файла по умолчанию

}

Добавьте обработчик события первоначальной загрузки формы и в ней определите позицию формы на рабочем столе. Это делает метод SetDesktopLocation класса Form. Просмотрите справку и убедитесь, что его надо вызывать после того, как форма показалась на экране. Многие другие действия с элементами формы следует производить после того, как отработал конструктор.

void MainForm_Load(object sender, EventArgs e)

{

  SetDesktopLocation(10, 10); // Позиция формы на рабочем столе

}

Сейчас в набор данных DataSet мы программным способом введем две таблицы: Studs и Exams и заполним их данными. На этапе выполнения пользователь сможет дополнить таблицы произвольными данными, затем сохранить весь набор в файле XML-формата (сделаем это чуть позже). Перечисленные действия удобно выполнить в отдельном методе, назовем его InitDataSet.

void InitDataSet()

{

  ds = new DataSet("StudentsSet");    // Источник данных (аналог базы данных)

  DataTable studs = new DataTable("Studs");

  SetPrimaryColumn(studs);            // Этот метод создадим позже