¨ Класс Form1 содержит переменную components и стандартный набор методов. Методы класса Container управляют поведением компонетов.
¨ Список используемых пространств имен (директив using) оптимизирован и в него не следует включать те пространства, которые не используются приложением.
Рассмотрим, как работать с элементом управления DataGrid. Этот интерфейсный компонент значительно более удобен в использовании, чем стандартный ListBox. Он позволяет производить редактирование данных по месту их размещения. Он эффективен не только в нашем сценарии, но и в более сложных приложениях, например, при отображении данных, хранимых в таблице реляционной базы данных. Источник данных для DataGrid можно выбрать как на этапе компиляции, так и на этапе выполнения.
В памяти список будет хранится с помощью уже знакомой вам структуры данных, управляемой классом ArrayList, а его данные будут отбражаться в окне компонента, управляемого классом DataGrid. Пользователь редактирует данные в ячейках DataGrid, а изменения сохраняются в объекте класса ArrayList. Как и в случае с другими элементами управления (например, ListBox), библиотека .NET имеет два класса с именем DataGrid: один в пространстве имен Windows.Forms, а другой — в Web.UI.WebControls. Чтобы не спутать их, помните, что они расположены на разных вкладках окна Toolbox. Поместив на форму компонент DataGrid, полезно идентифицировать новый компонент, дав ему более короткое имя (например, grid) и задать ему некоторые свойства: AlternatingBackColor, CaptionText, BackgroundColor и т.д. Далее следует внести ряд изменений в класс формы:
¨ Добавить описание класса Man, коллекцию menList типа ArrayList.
¨ Заполнить коллекцию ссылками на некоторые объекты класса Man.
¨ Связать эту коллекцию с компонентом DataGrid.
Для того, чтобы вставить в пространство имен PeopleGrid новый класс Man можно воспользоваться мастером C# Class Wizard. Здесь я хочу обратить ваше внимание на то, что новый класс нельзя вставлять в пространство имен перед классом Form1. Его можно вставить после класса формы или в другой файл (сохранив тем же самым пространство имен). Тогда не будет проблем с видимостью имен. Описание класса Man можно взять из проекта консольного типа, однако, в рамках данного проекта нам не понадобится значительная часть его функциональности.
Компонент DataGrid снимает с нас заботы по вводу и выводу данных. Поэтому, используем более простой класс Man. Для иллюстрации важного момента в технологии управления DataGrid добавим в класс еще одно поле — номер телефона. Первоначально оно не поддержано свойством и это важно.
class Man
{
protected string name; // Старые данные
protected uint age;
protected string phone; // Новое поле данных, не поддержанное свойством
public string Name // Свойства
{
get { return name; }
set
{
int i = value.IndexOf('\n'); // Ищем признак конца строки
if (i < 0) // Если не нашли,
i = value.Length;// то узнаем длину строки
if (i > 25) // Укорачиваем слишком длинную строку
value = value.Substring (25);
else if (i < 1) // Если строка оказалась пустой,
value = "N/A";// имя не определено
name = value; // Присваиваем закрытой переменной новое значение
}
}
public uint Age
{
get { return age; }
set
{
if (value < 150)
age = value;
}
}
public Man(string n, uint a, string ph) // Конструктор класса
{
Name = n; Age = a; phone = ph;
}
}
Класс ArrayList обладает универсальными возможностями и позволяет оперировать в памяти данными произвольного типа. Введите в класс формы объявление объекта этого типа.
private ArrayList menList = new ArrayList(); // Коллекция ссылок
и вставьте в конструктор формы вызов метода, заполняющего коллекцию.
public Form1()
{
InitializeComponent();
MakeList(); // Начальное заполнение списка данных
}
MakeList должен заполнить коллекцию объектов и, как будет показано ниже, определить структуру компонента grid.
private void MakeList()
{
//==== Наполните коллекцию ссылками на людей (объекты класса Man)
}
Теперь привяжем (bind) компонент grid к коллекции menList. Для этого вставьте в конструктор формы следующую строку.
grid.DataSource = menList; // Связываем коллекцию с компонентом DataGrid
Запустите приложение и убедитесь, что в окне формы появляется таблица, которая содержит лишь два столбца с заголовками Age и Name. Заголовки столбцов, как можно догадаться, были автоматически вычислены на основе данных класса Man. Если присмотреться внимательно, то можно увидеть, что имена столбцов соответствуют идентификаторам свойств класса, а не полей данных (name, age), которые начинаются со строчных букв.
Это предположение объясняет еще один факт — отсутствие в таблице третьего столбца с номером телефона. Для того, чтобы проверить догадку, достаточно ввести в класс еще одно свойство Phone, которое управляет скрытым полем данных phone. Сделайте это и вновь запустите. Убедитесь, что на сей раз таблица содержит все три столбца данных.
Документация гласит, что пользователь может осуществлять навигацию по ячейкам таблицы и редактировать ее данные. Все изменения немедленно отражаются в связанной с таблицей коллекции menList. Этот факт следует проверить. Для этого:
1. Откройте окно Form1.cs[Design] и переведите фокус в элемент DataGrid,
2. Нажмите кнопку Events, которая расположена в верхней части окна свойств,
3. Отыщите в списке событий строку CurrentCellChanged, которая именует событие перехода фокуса из одной ячейки таблицы в другую, то есть смены активной (текущей) ячейки, и дважды щелкните над ней.
4. В классе Form1 появится функция обработки указанного события. Введите в нее следующий код:
private void grid_CurrentCellChanged (object sender, EventArgs e)
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.