2016-03-30 15 views
1

Bir sütun onay kutusu ile bir datagridview var otomatik getirildiğinde gelen DataGridView kontrol enter image description hereYakalama ve önle Onay Kutusu un/

İstediğim şey ise bir onay kutusu tıklayın (i CellContentClick Olay kullanın) Bir Messagebox göstermek istiyorum eğer kullanıcı tamam tuşuna basarsa .. o zaman onay kutusu kontrol edilir ve yeni sorgu başlar. Else Annul veya Kapat Mesaj Kutusu -> işaretlenmemiş onay kutusu.

Ama uygular bir sorun var ..

private void dgvApprovazione_CellContentClick(object sender, DataGridViewCellEventArgs e) 
    { 
     try 
     { 

      if (dgvApprovazione.Rows[e.RowIndex].Cells[e.ColumnIndex] is DataGridViewCheckBoxCell) 
      { 
       CheckBox checkboxTmp = sender as CheckBox; 

       checkboxTmp.AutoCheck = false; 


      } 


     } 
     catch(Exception ex) 
     { 
      MessageBox.Show(ex.Message); 
     } 
    } 

DÜZENLEME --- Ben pencereleri tasarım erişmek değil. Onay kutusu, DB'nin sonucu olan bir dinamyc sütundur. DB'deki alanlar true/false tipidir .. Datagridview'de onay kutusunu işaretleyin veya işaretini kaldırın.

Ben yakalayıp 'kod-zamanlı' autocheck engellemek istiyorum

Sütun sadece okumak bir hale getirebilir
+0

Üzgünüm, şimdi belirtim ..... Tasarım zamanında erişim engellerim ... Çünkü onay kutusu bir alan (d/d) ile ilgili bir db sonucudur. – rul3z

cevap

1

sonra, sütunun ReadOnly özelliğini kullanarak sütun eklemek CelllContextClick işlemek ve mesajı gösterdiğinde başlatmak veya mesaj kutusu sonucuna dayanarak hücrenin değerini kutu ve ayarlayın: Orada hücrede gerçek CheckBox değildir ve olayın gönderen DataGridView olan

private void Form1_Load(object sender, EventArgs e) 
{ 
    //Load data 
    //Add columns 

    //I suppose your desired coulmn is at index 0 
    this.dataGridView1.Columns[0].ReadOnly = true; 
} 

private void dataGridView1_CellContentClick(object sender, DataGridViewCellEventArgs e) 
{ 
    //I suppose your desired coulmn is at index 0 
    if (e.ColumnIndex == 0 && e.RowIndex >= 0) 
    { 
     var result = MessageBox.Show("Check Item?", "", MessageBoxButtons.YesNoCancel); 
     if (result == System.Windows.Forms.DialogResult.Yes) 
     { 
      ((DataGridView)sender)[e.ColumnIndex, e.RowIndex].Value = true; 
     } 
     else 
     { 
      ((DataGridView)sender)[e.ColumnIndex, e.RowIndex].Value = false; 
     } 
    } 
} 

.

+0

Bir önceki soruya bağlı olarak, tıklanan hücrenin yeni satıra ait olmadığını kontrol etmeniz gerekebilir: 'e.RowIndex! = DataGridView1.newRowIndex' kullanarak –

+0

Onay kutumun işaretlenmiş olması durumunda, bu strateji henüz onaylanmamıştır. Otomatik çekmeyi veya işaretlemeyi kaldırmayın. Ancak, işaretlendiğinde iyi çalışın ... Kontrol edildiğinde salt okunur onay kutusunu işaretleyin. – rul3z

+1

Onay kutunuzun işaretli olup olmadığını farketmez. Burada yaptığımız iş ** 1'dir. ** Hücrenin sadece okunması. Yani manuel olarak kontrol edemez veya işaretini kaldıramazsınız. ** 2 - ** 'CellContentClick' i idare etmek ve kontrol etmek veya işaretini kaldırmak için bir mantık sağlamak için orada bir mantık koyarak. ** Öyleyse ** Burada herhangi bir mantık olabilir. Örneğin, öğe kontrolünü veya başka bir mantığı değiştirmek istiyorsanız, value =! Değerini ayarlayabilirsiniz. –