Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ADO Intro 1 Task.docx
Скачиваний:
1
Добавлен:
01.05.2025
Размер:
555 Кб
Скачать
☆

Создание таблиц и внедрение их в DataSet

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

void InitDataSet()

{

ds = // Создайте источник данных (аналог базы данных) DataSet с именем "StudentsSet" или вовсе без имени

DataTable studs = ds.Tables.Add("Studs");// Создание таблицы данных с именем "Studs"

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

//======= Определяем схему таблицы

studs.Columns.Add ("Name"); // Добавляем колонку "Имя студента"

//==== Добавьте колонки Phone и Addr

// Создайте вторую таблицу с именем "Exams"

// Она должна иметь такой набор полей:

// ID (primary key). Вызовите вспомогательный метод SetPrimaryColumn (см. ниже)

// StudID (foreign key) (типа int), Course - имя курса лекций, Credit (зачет - незачет), Mark - оценка за экзамен (типа byte), Date - дата сдачи экзамена

}

При создании колонок для хранения данных типа, отличного от string, удобно пользоваться другой версией метода Add, например:

exams.Columns.Add("StudID", typeof(int));

Колонки первичных ключей обеих таблиц удобно добавить с помощью вспомогательного метода.

void SetPrimaryColumn(DataTable table)

{

DataColumn dc = table.Columns.Add("ID", typeof(int));

// Установите значения для следующих свойств колонки dc: AutoIncrement, AutoIncrementSeed, ReadOnly

table.PrimaryKey = new DataColumn[] { dc };

}

Код привязки первого компонента DataGridView к данным таблицы студентов добавьте внутрь метода RelateAndBind.

// Привязка DataGridView к данным DataSet. Включаем механизм DataBinding

gridStud.DataSource = ds;

gridStud.DataMember = ds.Tables[0].TableName; // Настройка механизма DataBinding

Если заполнить строки таблицы студентов (для этого следует написать код метода InitTables), то компонент DataGridView отобразит их на экране. Напомним, что DataSet и, вложенные в него объекты DataTable хранятся в памяти, а gridStud отображает данные таблицы студентов на экране. Важным моментом является привязка DataGridView к данным одной из таблиц DataSet. Механизм привязки к данным (DataBinding) задействован двумя операторами. Такой способ привязки (коллекции к коллекции) называется 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 AddStyle(DataGridView grid, int tableID)

{

// Установите свойство AutoGenerateColumns для объекта grid

DataColumnCollection cols = // Добудьте ссылку на множество колонок таблицы с индексом tableID

foreach (По всем колонка таблицы)

{

DataGridViewColumn col = null;

if (dc.DataType == typeof(bool))

col = new DataGridViewCheckBoxColumn();

else if (dc.DataType == typeof(DateTime))

{

col = new CalendarColumn();

col.DefaultCellStyle.Format = "d";

}

else if (dc.DataType == typeof(decimal))

{

col = new DataGridViewTextBoxColumn();

col.DefaultCellStyle.Format = "f2";

}

else if (dc.ColumnName == "Course")

{

DataGridViewComboBoxColumn combo = new DataGridViewComboBoxColumn();

combo.DataSource = courses;

col = combo;

}

else if (dc.ColumnName == "Mark")

{

dc.DefaultValue = (byte)2;

DataGridViewComboBoxColumn combo = new DataGridViewComboBoxColumn();

combo.DataSource = new byte[] { 2, 3, 4, 5 };

col = combo;

}

else

col = new DataGridViewTextBoxColumn();

col.AutoSizeMode = DataGridViewAutoSizeColumnMode.DisplayedCells;

if (dc == cols[cols.Count - 1])

col.AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill;

col.DataPropertyName = dc.ColumnName;

col.HeaderText = dc.ColumnName;

grid.Columns.Add(col);

}

grid.DefaultCellStyle.SelectionBackColor = Color.LightSteelBlue;

grid.DefaultCellStyle.SelectionForeColor = Color.Black;

grid.AlternatingRowsDefaultCellStyle.BackColor =

tableID == 0 ? Color.Wheat : Color.FromArgb(200, 255, 200);

}

  • Добавьте в проект файл с классами: CalendarControl, CalendarCell, CalendarColumn. Код классов был приведен в документе "C# Практика" в прошлом семестре. Класс CalendarColumn определяет тип колонок для отображения дат. Форматирование колонки с датой экзамена задается оператором: col.DefaultCellStyle.Format = "d";. Это позволяет убрать вывод времени и оставить только дату.

  • Вызовите метод AddStyle(gridStud, 0); в методе RelateAndBind (перед кодом привязки к таблице).

  • Запустите приложение и проверьте результат.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]