Ma'lumotlar panjasi ko'rinishidagi tekshirish katakchasi tekshirilganligini tekshirish yoki qanday tekshirish mumkin

datagridview ichida joylashgan katagiga bool holatini qanday tekshirish mumkin? Belgilangan bo'lsa, rost va false bo'lsa, unda tekshirilmagan bo'lsa. Menga yordam berishi mumkinmi?

Is it possible to handle this in dataGridView_CellContentClick

3

5 javoblar

Bu esa, MSDN-sahifalarida DataGridView uchun biroz murojaat qilinadi bu yerda va bu yerda .

Xususan, ular:

DataGridViewCheckBoxCell-da sekin urish uchun ushbu voqea avval paydo bo'ladi   Agar siz hisoblashni xohlamasangiz, tasdiqlash qutisi o'zgarish qiymatini belgilang   joriy qiymatdan kelib chiqadigan kutilgan qiymat, siz odatda muhokama qilasiz   Buning o'rniga DataGridView.CellValueChanged hodisasi. Chunki bu voqea   faqatgina foydalanuvchi tomonidan belgilangan qiymati bajarilganda paydo bo'ladi   Odatda hujayraning hujayradan chiqishi natijasida paydo bo'ladigan bo'lsa, siz ham uni boshqarishingiz kerak   DataGridView.CurrentCellDirtyStateChanged hodisasi. Ushbu ishlovchilarda, agar   joriy hujayra tasdiqlash qutisi xujayrasi bo'lib, DataGridView.CommitEdit ni chaqiring   usuli va Komissiya qiymatiga o'tadi.

Shuning uchun ular CellClick tipidagi hodisalardan foydalanishni tavsiya etadilar (ular hujayradan chiqmaguncha qiymatni hech qachon itarishmasliklari kerak), ammo buning o'rniga CurrentCellDirtyStateChanged va CommitEdit usulidan foydalaning.

Shunday qilib, siz:

dataGridView1.CurrentCellDirtyStateChanged += new EventHandler(dataGridView1_CurrentCellDirtyStateChanged);
dataGridView1.CellValueChanged += new DataGridViewCellEventHandler(dataGridView1_CellValueChanged);

void dataGridView1_CellValueChanged(object sender, DataGridViewCellEventArgs e)
{
    if (dataGridView1.Columns[e.ColumnIndex].Name == "CB")
    {
        MessageBox.Show(dataGridView1.Rows[e.RowIndex].Cells[e.ColumnIndex].Value.ToString());    
    }
}

void dataGridView1_CurrentCellDirtyStateChanged(object sender, EventArgs e)
{
    dataGridView1.CommitEdit(DataGridViewDataErrorContexts.Commit);
}

Va tekshirilayotgan qiymatni olish uchun - bu faqat DataGridViewCheckBoxCellning qiymat funktsiyasi.

Shunday qilib, agar borasan:

dataGridView1.Rows[rowindex].Cells[cellindex].Value 

siz tasdiqlash qutisiga mos keladigan boolean qiymatni olasiz (o'zgarish sodir bo'lgandan keyin).

6
qo'shib qo'ydi
Bu menga men uchun ishlaydi David
qo'shib qo'ydi muallif Dorababu Meka, manba

Buni ushbu usulda olishga harakat qilishingiz mumkin, agar siz indeksga asosan jadvalni tekshirib tursangiz, tekshirilgan holatni topishingiz mumkin.

bool IsChecked = Convert.ToBoolean((dataGridView1[ColumnIndex, RowIndex] as DataGridViewCheckBoxCell).FormattedValue))
0
qo'shib qo'ydi
Lekin mening talablarimga ko'ra, bu dataGridView_CellContentClick ning holatini tekshirib turadigan bo'lsak, bu har doim false
qo'shib qo'ydi muallif Dorababu Meka, manba

100% ishlaydi.

 private void grd_CellContentClick(object sender, DataGridViewCellEventArgs e)
        {

            grd.CommitEdit(DataGridViewDataErrorContexts.Commit);
            bool Result = Convert.ToBoolean((grd[e.ColumnIndex, e.RowIndex] as DataGridViewCheckBoxCell).Value);
        }
0
qo'shib qo'ydi

Agar belgilash dizaynerda aniqlansa, u checkbox'ning nomiga shunchaki soddalashtirib, uning "tasdiqlangan" xususiyatini haqiqiy/noto'g'ri deb tekshiradi.

Lekin, siz kodlash datagridga kod orqali qo'shilasiz deb o'ylaysizmi?

Bu holatda, siz uni tasdiqlash qutisiga havola qilishingiz kerak. Agar siz datagridga ro'yxatga qo'shadigan barcha tasdiqlash xujjatlarini qo'shsangiz yoki ularni nom bilan atashni istasangiz, ularni lug'atga qo'shaman.

Shuningdek, siz tanlagan voqeani Checked_Changed katakchasiga belgilash va xossalar panelidagi kichik murvat belgisini bosib, checkedChanged-voqeani topib, uni ikki marta siltash orqali amalga oshirishingiz mumkin.

voqea-kodda siz bosib chiqargan katakchani olishingiz mumkin: CheckBox mycheckbox = yuboruvchini CheckBox sifatida;

va keyin mycheckbox.checked murojaat qilish uchun bool olish uchun murojaat qilish.

0
qo'shib qo'ydi
Men murojaat qilganimda checked xususiyatini olisholmayman
qo'shib qo'ydi muallif Dorababu Meka, manba
Men DataGridViewCheckBoxCelldan foydalanib, biz faqat value ni olishimiz mumkinligini aytadigan odam shu. Checked
qo'shib qo'ydi muallif Dorababu Meka, manba
WinForms deb so'rayman
qo'shib qo'ydi muallif Dorababu Meka, manba
Menga misol kodini yubora oladimi?
qo'shib qo'ydi muallif Dorababu Meka, manba
Kechirasiz, C# katta harflar bilan sezgir, shuning uchun "tekshirilgan" (katta C bilan) murojaat qilishingiz kerak.
qo'shib qo'ydi muallif Mats Edvinsson, manba
OK, endi siz DataGridViewCheckBoxCell haqida gapirganingizni tushunaman. Ustunni o'rnatganingizda, siz FalseValue va TrueValue qiymatlarini belgilashingiz kerak deb o'ylayman. Keyin checkbox.Value-ga murojaat qilganingizda, agar siz uni tekshirmasangiz, FalseValue-ga kirgan narsangizni olasiz, aks holda siz TrueValue bo'lasiz. Umid qilamanki :)
qo'shib qo'ydi muallif Mats Edvinsson, manba
Men aytgan narsalarni ochish uchun kod yo'q. DataGridViewCheckBoxCell.Value huquqini olishingiz mumkinmi? Dizaynerda bo'lganingizda, datagridview-ni o'ng tugmasini bosing va ustunlarni tahrirlash-ni bosing. katakchangizni tanlang va "Data" -tab-ni o'ng panelda toping va "Data-GridViewCheckBoxCell.Value" dan olishni istagan FalseValue-da katakchani bekor qilganda qiymatni kiriting va so'ngra "TrueValue" tekshirilgandan so'ng olish
qo'shib qo'ydi muallif Mats Edvinsson, manba
va agar siz kod bo'yicha kodni qo'shsangiz, shunday qilishingiz mumkin: `private void dataGridView1_CellContentClick (ob'ektni yuboruvchi, DataGridViewCellEventArgs e) {var checkcell = yangi DataGridViewCheckBoxCell (); checkcell.FalseValue = FALSE; checkcell.TrueValue = rost; DataGridView1 [0, 0] = checkcell;//agar ((bool) ((DataGridViewCheckBoxCell) dataGridView1 [0, 0]) qiymatini qo'shish() == rost) {// belgilash katakchasi belgilansa,
qo'shib qo'ydi muallif Mats Edvinsson, manba
bu yangi javob sifatida, chunki bu oson o'qilmaydi.
qo'shib qo'ydi muallif Mats Edvinsson, manba
private void dataGridView1_CellContentClick(object sender, DataGridViewCellEventArgs e)
{
    var checkcell = new DataGridViewCheckBoxCell();
    checkcell.FalseValue = false;
    checkcell.TrueValue = true;
    checkcell.Value = false;
    dataGridView1[0, 0] = checkcell; //Adding the checkbox

    if (((bool)((DataGridViewCheckBoxCell)dataGridView1[0, 0]).Value) == true)
    {
        //Stuff to do if the checkbox is checked
    }
}
0
qo'shib qo'ydi
Biroq, bu belgilanmagan holatda birinchi marta katakchani bosganimda ishlamaydi. Belgilangan bo'lsa, bu ishlaydi
qo'shib qo'ydi muallif Dorababu Meka, manba
ahh, buni tushunib etdim. lekin tahrirlash bilan ishlaydi. faqat qo'shing: checkcell.Value = false;
qo'shib qo'ydi muallif Mats Edvinsson, manba