Veri ızgarası görünümü içindeki Onay kutusunun işaretli olup olmadığını nasıl kontrol edebilirim?

datagridview içindeki bir onay kutusunun bool durumunu nasıl kontrol edebilirim. İşaretlendiyse true ve işaretlenmemişse false 'ı kullanmak istiyorum. Biri bana yardım edebilir mi.

Is it possible to handle this in dataGridView_CellContentClick

3

5 cevap

Bu, DataGridView burada ve buralarda .

Özellikle şunları söylüyorlar:

DataGridViewCheckBoxCell'deki tıklamalar için bu olay,   onay kutusu değerini değiştirir, eğer hesaplamak istemiyorsanız   Geçerli değere göre beklenen değer, genellikle idare edeceksiniz   bunun yerine DataGridView.CellValueChanged olayı. Çünkü bu olay   yalnızca kullanıcı tarafından belirlenen değer işlendiğinde gerçekleşir,   genellikle odak hücreyi terk ettiğinde oluşur, ayrıca   DataGridView.CurrentCellDirtyStateChanged olay. Bu işleyicide   Geçerli hücre bir onay kutusu hücresi DataGridView.CommitEdit çağrısı   yöntemini kullanın ve Commit değerini girin.

Bu nedenle, CellClick türündeki olayları kullanmamaya karşı öneride bulunurlar (hücreyi terk edene kadar değeri asla itmedikleri için), bunun yerine CurrentCellDirtyStateChanged ve CommitEdit yöntemini kullanırlar.

Yani sonuçta:

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);
}

Ve kontrol edilen değeri elde etmek için - bu sadece DataGridViewCheckBoxCell'in Value özelliği.

Yani eğer giderseniz:

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

onay kutusuna karşılık gelen bir boole değeri alırsınız (değişiklik yapıldıktan sonra).

6
katma
Bu benim için çalışıyor Teşekkürler David
katma yazar Dorababu Meka, kaynak

Bunu bu şekilde elde etmeyi deneyebilirsiniz, söz konusu şemada, kontrol edilen durumu bulabileceğiniz endekse göre döngü yapmak durumundasınız.

bool IsChecked = Convert.ToBoolean((dataGridView1[ColumnIndex, RowIndex] as DataGridViewCheckBoxCell).FormattedValue))
0
katma
Ancak şartım gereği dataGridView_CellContentClick koşulunu kontrol ettiğim için bu her zaman false olacaktır.
katma yazar Dorababu Meka, kaynak

% 100 çalışıyor.

 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
katma

onay kutusu tasarımcıda tanımlanmışsa, onay kutusunun adına basit ve "kontrol edilen" özelliğini doğru/yanlış için kontrol etmek kadar basit olurdu.

Ama ben onay kutusunu datagrid'e kod ile eklediğinizden şüpheliyim?

Bu durumda, herhangi bir yere onay kutusuna bir referans kaydetmeniz gerekir. Eğer i size veri kılavuzuna eklediğim tüm onay kutularını bir listeye ekleyeceksem ya da onlara ismine başvurmak istersen onları bir sözlüğe eklerim.

Ayrıca bir kutucuğu işaretleyerek Checked_Changed olayına ve özellikler panelindeki küçük civata simgesine tıklayıp checkedChanged olayını bulup ikiye katlayarak onay kutusuna da ekleyebilirsiniz.

Etkinlik kodunda yazarak tıklatılan onay kutusunu elde edebilirsiniz: CheckBox mycheckbox = CheckBox olarak gönderici;

ve daha sonra kontrol edilen veya olmayan için bir nota almak için kontrol kutusunu işaretleyin.

0
katma
Başvurduğumda işaretli özelliğini alamıyorum
katma yazar Dorababu Meka, kaynak
Ben DataGridViewCheckBoxCell kullanarak bulursak ben sadece value Checked 'ı bulabiliriz.
katma yazar Dorababu Meka, kaynak
WinForms 'dan soruyorum
katma yazar Dorababu Meka, kaynak
Anlamadım, bana örnek kod gönderebilir misin
katma yazar Dorababu Meka, kaynak
Üzgünüz, C# büyük/küçük harfe duyarlıdır, dolayısıyla "Checked" (Büyük harfli C) ile ilgili olarak benim kötü ...
katma yazar Mats Edvinsson, kaynak
Tamam, şimdi DataGridViewCheckBoxCell'den bahsetmişken, ne demek istediğini anlıyorum. Sütunu ayarladığınızda FalseValue ve TrueValue değerlerini ayarlamanız gerektiğini düşünüyorum. Daha sonra onay kutusunu işaretlediğinizde.Value, işaretlenmemişse FalseValue'ye girdiğiniz şeyi alırsınız, aksi takdirde TrueValue alırsınız. Umarım yardımcı olur :)
katma yazar Mats Edvinsson, kaynak
ne dediğimi anlamak için kod yok. DataGridViewCheckBoxCell.Value hakkını alabileceğinizi söylediniz? Tasarımcıdayken, datagridview'i sağ tıklayın ve sütunları düzenle'yi tıklayın. onay kutusu sütununuzu seçin ve sağ bölmedeki "Veri" -tab dosyasına bakın ve onay kutusu işaretlenmediğinde DataGridViewCheckBoxCell.Value'dan almak istediğiniz FalseValue değerine girin ve sonra istediğiniz bir TrueValue değerine girin. kontrol edildiğinde olsun
katma yazar Mats Edvinsson, kaynak
ve onay kutusunu kodla ekliyorsanız bunu yapabilirsiniz: `özel geçersiz veriGridView1_CellContentClick (nesne göndereni, DataGridViewCellEventArgs e) {var checkcell = new DataGridViewCheckBoxCell (); checkcell.FalseValue = false; checkcell.TrueValue = true; dataGridView1 [0, 0] = checkcell;//((bool) ((DataGridViewCheckBoxCell) dataGridView1 [0, 0]). Değer) == true) {checkbox işaretliyse yapılacaklar}}
katma yazar Mats Edvinsson, kaynak
Bunu yeni bir cevap olarak yorumlayın çünkü bu neredeyse okunamaz.
katma yazar Mats Edvinsson, kaynak
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
katma
Ancak bu işaretlenmemiş durumdayken ilk kez onay kutusuna tıkladığımda çalışmaz. Bu onay kutusu işaretli durumdayken çalışır
katma yazar Dorababu Meka, kaynak
ahh, bunu fark etti. ama benim düzenleme ile çalışır. sadece ekleyin: checkcell.Value = false;
katma yazar Mats Edvinsson, kaynak