1.6.2. Ma'lumotlarni tahrirlash.
Biz allaqachon satrlarni tahrirlash mavzusiga to‘xtadik va ushbu bobda biz ushbu mavzuni chuqurroq ko‘rib chiqishimiz kerak. Shunday qilib, quyidagi kodni yozish tugmachasini bosib, formani ustiga bosing:
private void editButton_Click(object sender, EventArgs e)
{
// yozuvlar sonini tekshiring
if(table.Rows.Count == 0)
return;
DataRow row = table.Rows[0]; // biz nol chiziqni olamiz
row[1] = “Сахар”; // birinchi maydonning qiymatini o‘zgartirish
}
Avval jadvalda biron bir yozuv mavjudligini tekshiramiz. Agar satrlar to‘plamidagi elementlar soni nolga teng bo‘lsa, unda tahrirlash uchun hech narsa yo‘q. Agar yozuvlar bo‘lsa, unda biz nol qatorni olamiz va birinchi maydonning qiymatini o‘zgartiramiz.
Ma'lumotni o‘zgartirganda DataTable jadvali ma'lumotlarning holatini kuzatishga imkon beradigan quyidagi hodisalarni keltirib chiqaradi:
ColumnChanged - ustun har doim o‘zgarganida, voqea sodir bo‘ladi;
ColumnChanging - Ustundagi qiymat o‘zgarishi hozirgi vaqtda o‘zgarmoqda va o‘zgarish hali ham bekor qilinishi mumkin;
RowChanged - chiziqdagi qiymat yoki chiziqning holati o‘zgargan;
RowChanging - satrdagi qiymat yoki satrning holati hozirgi vaqtda o‘zgaradi.
Ushbu hodisalarning barchasi har safar yaratiladi. ma'lumotlarni o‘zgartirganda, shu sababli cheklovlarsiz amalga oshirib bo‘lmaydigan ma'lumotlarning to‘g‘riligi bo‘yicha qo‘shimcha tekshiruvlarni olib keladigan voqea ishlov beruvchisini ularga osib qo‘yish qulay. Ammo, agar chek birdaniga ikkita chiziqqa ta'sir qilsa va foydalanuvchi ularni bir vaqtning o‘zida o‘zgartirishi kerak bo‘lsa nima bo‘ladi? Foydalanuvchi faqat birinchi qatorni o‘zgartirgan, ammo ikkinchi tegmaganligini qanday tekshirish mumkin?
Ushbu vaziyatni tasvirlash uchun men bank operatsiyalari bo‘yicha misol keltirmoqchiman. Masalan, bitta satrdan ma'lum miqdordagi pulni olib, boshqa qiymatga qo‘shishingiz kerak. Pulni olib qo‘ygandan so‘ng, miqdor o‘zgaradi va tekshirish tetiklari ishlamasligi mumkin. Ushbu muammoni hal qilish uchun har ikkala satrni tahrirlash rejimiga qo‘yishingiz mumkin, ularning har biri uchun BeginEdit usulini chaqirib) va pul o‘tkazmalarini amalga oshirishingiz mumkin.
BeginEdit () usulini chaqirgandan so‘ng, ma'lumotlar o‘zgarishi hodisalari yaratilmaydi. Siz qiymatlarni sozlashingiz mumkin, va EndEdit () usulini chaqirgandan so‘ng amalga oshirilgan o‘zgarishlar darhol boshlanadi. Mantiqni quyidagi misol bilan ko‘rsatish mumkin.
Table.BeginEdit();
// keyingi o‘zgarish voqealari yaratilmaydi
DataRow row = table.Rows[1]; // biz birinchi qatorni olamiz
Row[1] -=10; // 1-maydon qiymatini kamaytiring
DataRow row table.Rows[2]; // biz ikkinchi qatorni olamiz
Row[1] += 10; // 2-chi maydonning qiymatini oshiring
Table.EndEdit(); // voqealar bu erda yaratiladi
// keyingi o‘zgarish voqealari yana yaratila boshlaydi
EndEdit () usulini chaqirganda, har ikki o‘zgarish uchun darhol - satr va 2-qator uchun hodisalar hosil bo‘ladi.
|