studs.Columns.Add("Name"); // Определяем схему таблицы
studs.Columns.Add("Phone");
studs.Columns.Add("Addr");
DataTable exams = new DataTable("Exams"); // Вторая таблица
SetPrimaryColumn(exams);
exams.Columns.Add("Credit", typeof(bool));
exams.Columns.Add("Date", typeof(DateTime));
exams.Columns.Add("Mark", typeof(byte));
ds.Tables.Add(studs); // Вставляем таблицы в коллекцию таблиц DataSet
ds.Tables.Add(exams);
InitTables(); // Заполнение таблиц DataTable (создайте заглушку)
//==== Привязка DataGridView к данным таблицы DataSet. Работает DataBinding
studsGrid.DataSource = ds;
studsGrid.DataMember = ds.Tables[0].TableName;
}
Поля первичных ключей обеих таблиц удобно добавить с помощью вспомогательного метода.
void SetPrimaryColumn(DataTable table)
{
DataColumn dc = new DataColumn("ID", typeof(int));
dc.AutoIncrement = true;
dc.AutoIncrementSeed = 1;
dc.ReadOnly = true;
table.Columns.Add(dc);
table.PrimaryKey = new DataColumn[] { dc };
}
Если заполнить таблицу студентов (объект DataTable), а для этого следует написать код метода InitTables, то компонент DataGridView способен отбразить данные этой таблицы на форме. Напомним, что DataSet и, вложенная в него, DataTable хранятся в памяти, а DataGridView отображает эти данные на экране. Важным шагом является привязка компонента studsGrid к данным одной из таблиц набора DataSet. Механизм привязки к данным (DataBinding) задействован двумя операторами C#:
studsGrid.DataSource = ds;
studsGrid.DataMember = ds.Tables[0].TableName;
Такой способ привязки (коллекции к коллекции) называется Complex DataBinding, в отличие от Simple DataBinding, когда одно значение (свойство) привязывается к одному значению (свойству).
Добавьте еще один вспомогательный метод, который сэкономит ваше время на заполнение таблиц данными.
void InitTables()
{
object[] studs = {
new object[] {1, "Charlie Parker", "123-4455", "Broadway, 52a"},
new object[] {2, "Alex Black", "555-1122", "5-th Avenue, 74" },
new object[] {3, "Andy Williams", "430-5125", "Back st., 22" },
new object[] {4, "Charley Mingus", "230-1466", "Hi st., 30" },
new object[] {5, "Chet Baker", "320-8656", "Howard st., 15" },
new object[] {6, "Lou Rowles", "552-4233", "Basin st., 10" },
};
foreach (object[] o in studs)
ds.Tables[0].Rows.Add(o);
}
¨ Запустите приложение и проверьте его работу в режиме ввода и редактирования данных.
¨ Добавьте метод, который изменяет облик DataGridView путем установки стилей отдельных колонок а также общих компонентов стиля, действующих на все ячейки.
void AddStyleStud(DataGridView grid)
{
//=== Цикл прохода по колонкам таблицы (в памяти)
foreach (DataColumn dc in ds.Tables[0].Columns)
{
//=== Создание колонки DataGridView (на экране)
DataGridViewTextBoxColumn tb = new DataGridViewTextBoxColumn();
tb.AutoSizeMode = DataGridViewAutoSizeColumnMode.DisplayedCells;
tb.DataPropertyName = dc.ColumnName;
tb.HeaderText = dc.ColumnName;
grid.Columns.Add(tb);
}
grid.DefaultCellStyle.SelectionBackColor = Color.LightSteelBlue;
grid.DefaultCellStyle.SelectionForeColor = Color.Black;
grid.AlternatingRowsDefaultCellStyle.BackColor = Color.Wheat;
}
¨ Вызовите метод AddStyleStud (studsGrid) после инициализации таблицы (InitTables).
¨ Проверьте результат (см. рис. ниже)
В методе AddStyleStud мы управляем набором колонок таблицы, которые отображает DataGridView, и компонентами его стиля. Здесь опять работает механизм DataBinding (привязка одного свойства к другому), он включается оператором tb.DataPropertyName = dc.ColumnName;. Параметр grid сейчас кажется лишним (ясно, что это — studsGrid), но он пригодится, когда придется форматировать совсем другой DataGridView, отображающий отфильтрованные данные таблицы студентов.
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.