=
= .
DataTable = = = < DataRow ob’yektlari to`plami>.
DataColumn = .
DataRow = .
DataRelation = .
Savol tug'iladi: jadvalning tarkibini, masalan, DataGridView elementida aks ettirish uchun ularsiz nima qilishingiz mumkin? Haqiqat shundaki, oddiy ma'lumotni namoyish qilish uchun ushbu ob'ektlarni yaratish talab qilinmaydi, ammo bu holda barcha ma'lumotlar Microsoft Word hujjatidagi jadvallar kabi bir hil matn o'zgaruvchilari bo'ladi. DataSet ma'lumotlar strukturasini o'zi shakllantira olmaydi - o'zgaruvchilar turi, birlamchi va ikkilamchi kalitlar, jadvallar o'rtasidagi munosabatlar. Bunday tuzilmani boshqarish uchun uning etarli darajada namoyish etilishi uchun (masalan, dastur rejimida yaratilgan elementlarga havola qilingan ma'lumotlarni aks ettirish) ushbu ob'ektlarni aniqlash kerak.
DataTable va DataColumn ob’yektlarini dasturiy ravishda yaratish.
Yuqorida aytib o'tilganidek, barcha ADO ob’yektlari dasturiy jihatdan yaratilishi mumkin. Masalan, jadval va ustunlar yaratish:
DataSet dsTests = new System.Data.DataSet();
//
// dsTests
//
dsTests.DataSetName = "NewDataSet";
dsTests.Locale = new System.Globalization.CultureInfo("ru-RU");
E'tibor bering, oxirgi satrda jadvalning milliy sozlamalari haqida ma'lumot mavjud: ru-RU. Agar ishlab chiqilgan dastur u ishlab chiqilgan mamlakatdan tashqarida ishlatilsa (bu holda, Rossiya) zarur.
Endi Questions jadvali uchun DataTable yaratamiz (savollar):
DataTable dtQuestions = dsTests.Tables.Add("Questions");
//yoki
//DataTable dtQuestions = new DataTable("Questions");
//dsTests.Tables.Add(dtQuestions);
Bu dtQuestions DataTable-ni o'rnatadi, so'ngra dsTests ob'ektining Tables xususiyatining Add usulini chaqiradi va Questions jadval nomini beradi. Keyinchalik, dtQuestions ob'ektida maydonlar yaratamiz:
DataColumn dсQuestID = dtQuestions.Columns.Add("questID", typeof(Int32)); dсQuestID.Unique = true;
DataColumn dcQuestion = dtQuestions.Columns.Add("question");
DataColumn dcQuestType = dtQuestions.Columns.Add("questType", typeof(Int32));
Questions jadvalidagi mos ustunlarni aks ettirish uchun zarur bo'lgan maydonlarni yaratamiz. dtQuestions ob'ektining Columns xususiyatining qayta yuklangan usuli Add ustun nomini va uning ma'lumotlar turini ko'rsatishga imkon beradi (1-rasm).
1-rasm. Maydon yaratish
Unique xususiyati bu maydonda takrorlanadigan qiymatlar bo'lmasligi kerakligini, u noyob bo'lishi kerakligini bildiradi (bu yerda questID maydoni Questions jadvalining asosiy kaliti hisoblanadi).
Xuddi shu tarzda, biz Variants jadvali uchun DataTable ob'ektini (javob variantlari) va tegishli maydonlarni yaratamiz:
// "Variants" jadvalini yaratamiz.
DataTable dtVariants = dsTests.Tables.Add("Variants");
// "Variants" jadvalini to`ldiramiz
DataColumn dcID = dtVariants.Columns.Add("id", typeof(Int32));
dcID.Unique = true;
dcID.AutoIncrement = true;
DataColumn dcVariantQuestID = dtVariants.Columns.Add("questID", typeof(Int32));
DataColumn dcVariant = dtVariants.Columns.Add("variant");
DataColumn dcIsRight = dtVariants.Columns.Add("isRight", typeof(Boolean));
Bu yerda biz dcID ob'ektining AutoIncrement xususiyatini true ga qo'shimcha ravishda o'rnatdik. AutoIncrement xususiyati (hisoblagich) Microsoft Access-da “Hisoblagich” ma'lumotlar turiga o'xshash maydon uchun hisoblagich yaratishga imkon beradi.
Endi jadvallar orasidagi munosabatni yaratishga kirishamiz. Ma'lumotlar bazasida Questions bosh jadvali va Variants qism jadvali ikkala jadvalda mavjud bo'lgan QuestID maydoni bilan bog'langan bo'lar edi. Questions jadvalining questID maydoni uchun dasturlarni yaratishda dsQuestID ob'ekti va Variants jadvalidagi xuddi shu maydon uchun dcVariantQuestID ob'ekti yaratildi. Kodda jadvallar orasidagi bog'lanishni yaratish quyidagicha bo'ladi:
DataRelation drQuestionsVariants = new DataRelation("QuestionsVariants",
dсQuestID, dcVariantQuestID);
dsTests.Relations.Add(drQuestionsVariants);
Bu yerda DataRelation ob'ekti konstruktorida drQuestionsVariants nomi DataRelation ob'ekti (klassi) ning nomi va "QuestionsVariants" qatori konstruktorga berilgan relationName xususiyati - yaratilayotgan drQuestionsVariants ob'ekti tarkibidagi munosabatlar nomi. Boshqacha qilib aytganda, drQuestionsVariants - bu DataRelation misoli nomi, biz uni kodda ishlatamiz va RelationName xususiyati shunchaki aks ettirilgan munosabatlarning nomi bo'lib, ularni o'chirish yoki o'zgartirish mumkin.
Shunday qilib, jadvallarni, maydonlarni va hatto jadvallar o'rtasidagi munosabatlarni aks ettirish uchun barcha ob'ektlarni dasturiy ravishda yaratishingiz mumkin.