SORU
26 AĞUSTOS 2010, PERŞEMBE


Nasıl tıklama olayı işlemek için Datagridview Düğmesi Sütunda?

Bir windows uygulaması geliştiriyorum C#. DataGridView veri görüntülemek için kullanıyorum. Bu düğme bir sütun ekledim. Nasıl DataGridView içinde bu düğmeye tıklayın olay halledebilir miyim bilmek istiyorum.

CEVAP
3 Aralık 2012, PAZARTESİ


Senin için bir düğmesi DataGridView kattınız ve tıklandığı zaman bazı kod çalıştırmak istiyorum.
Çok kolay - sadece aşağıdaki adımları izleyin:

Dont:

İlk olarak, burada ne varDEĞİLyapmak için:

Eğer bir düğmeye tıklandığında olup olmadığını belirlemek için diğer cevapları burada ve hatta documentation at MSDN bu sütun, dizin veya sütun adını koda için sunulan bazı öneriler kaçınmak olacaktır. Tıklayın olay kayıtları için bütün şebeke, yani bir şekilde ihtiyacınız belirlemek için bir buton vardı tıkladım, ama yine de öyle diyelim o düğmeye hayatlarında belirli bir sütun adı veya dizin... orada daha kolay bir yolu var...

Ayrıca, idare etmek için hangi dikkatli olun. Yine belgelere ve birçok örnek bu yanlış. En yangın örnekleri CellClick olay tutamacı:

bir hücrenin herhangi bir parçasını tıklandığında.

...ama aynı zamanda ateş edecek zamansatırBaşlığı tıkladım. Bu ekstra kod sadece e.RowIndex değeri 0'dan küçük olup olmadığını belirlemek için ekleme gerektirir

Bunun yerine sadece oluşur: CellContentClick kolu

bir hücre içinde içerik tıklandığında

Sebebi ne olursa olsun,sütunbaşlığı da 'içeriği' bir hücre içinde, hala bunun için aşağıda kontrol etmek zorundayız. kabul edilir

Yapın:

Burada yapman gereken şu:

İlk olarak,dökmeDataGridView bunu ortaya çıkarmak için yazın Gönderen zamanda iç tasarım özellikleri. Parametre türünü değiştirebilirsiniz, ama bazen ya işleyicileri eklemek ve kaldırmak zor hale getirebilir.

Sonraki, eğer bir düğmeye tıklandığında olup olmadığını görmek için, sadece sütun olayı büyütmek türü DataGridViewButtonColumn olduğundan emin olun. Biz zaten yazın Gönderen attım çünkü DataGridView, Columns tahsilat ve cari sütun e.ColumnIndex kullanarak seçebilirsiniz. Eğer o nesne türü DataGridViewButtonColumn olup olmadığını kontrol edin.

Eğer ızgara başına birden fazla düğmeleri ayırt etmek gerekiyorsa, o da sütun adı veya dizin göre seçebilirsiniz, ama ilk kontrol olmamalı. Her zaman bir ilk düğmesi tıklandığında olduğundan emin olun ve sonra da uygun başka bir kolu. Sadece ızgara başına tek bir düğme var çoğu durumda, yarışlar için hemen atlayabilirsiniz.

Hepsini bir araya getirirsek:

C#:

private void dataGridView1_CellContentClick(object sender, DataGridViewCellEventArgs e)
{
    var senderGrid = (DataGridView)sender;

    if (senderGrid.Columns[e.ColumnIndex] is DataGridViewButtonColumn &&
        e.RowIndex >= 0)
    {
        //TODO - Button Clicked - Execute Code Here
    }
}

VB:

Private Sub DataGridView1_CellContentClick(sender As System.Object, e As DataGridViewCellEventArgs) _
                                           Handles DataGridView1.CellContentClick
    Dim senderGrid = DirectCast(sender, DataGridView)

    If TypeOf senderGrid.Columns(e.ColumnIndex) Is DataGridViewButtonColumn AndAlso
       e.RowIndex >= 0 Then
        'TODO - Button Clicked - Execute Code Here
    End If

End Sub

Güncelleme 1 - Özel Bir Olay

Eğer biraz eğlenmek istersen, bir düğme Kılavuzunu üzerine tıklandığı zaman kendi olay yükseltilmiş olması için ekleyebilirsiniz. Miras vb., dağınık almadan Kılavuzunu kendisi için ekleyebilirsiniz. ama uygun bir form için özel bir olay eklemek ve ateş edebilirsiniz. Biraz daha kod var, ama ters bir düğme, bir düğme tıklandığında olup olmadığını belirlemek için nasıl ile tıklandığında ne yapmak istediğini dışarı ayrılmış olman.

Sadece bir olayı bildirmek, uygun zaman yükseltmek ve işlemek. Bu gibi görünecektir:

Event DataGridView1ButtonClick(sender As DataGridView, e As DataGridViewCellEventArgs)

Private Sub DataGridView1_CellContentClick(sender As System.Object, e As DataGridViewCellEventArgs) Handles DataGridView1.CellContentClick
    Dim senderGrid = DirectCast(sender, DataGridView)
    If TypeOf senderGrid.Columns(e.ColumnIndex) Is DataGridViewButtonColumn AndAlso e.RowIndex >= 0 Then
        RaiseEvent DataGridView1ButtonClick(senderGrid, e)
    End If
End Sub

Private Sub DataGridView1_ButtonClick(sender As DataGridView, e As DataGridViewCellEventArgs) Handles Me.DataGridView1ButtonClick
    'TODO - Button Clicked - Execute Code Here
End Sub

2 - Genişletilmiş Kılavuz Güncelleyin

Çok iyi olabilir bizim için bunları yaptım bir ızgara ile çalışıyorduk. İlk soru kolay cevap verebiliriz: you've added a button to your DataGridView and you want to run some code when it's clicked. İşte DataGridView genişleten bir yaklaşım. Her kütüphane ile özel bir kontrol sunmak zorunda güçlük değer olmayabilir, ama en azından bunu sonuna kadar kullanır, kod düğmesi, belirleme için kullanılan tıkladım.

Ekle kurul bu sadece:

Public Class DataGridViewExt : Inherits DataGridView

    Event CellButtonClick(sender As DataGridView, e As DataGridViewCellEventArgs)

    Private Sub CellContentClicked(sender As System.Object, e As DataGridViewCellEventArgs) Handles Me.CellContentClick
        If TypeOf Me.Columns(e.ColumnIndex) Is DataGridViewButtonColumn AndAlso e.RowIndex >= 0 Then
            RaiseEvent CellButtonClick(Me, e)
        End If
    End Sub

End Class

İşte bu kadar. Bir daha asla dokunma. Senin Kılavuzunu tam olarak bir DataGridView aynı çalışmalıdır DataGridViewExt türü olduğundan emin olun. Ayrıca bu gibi işleyebilir ekstra bir olay çıkacak hariç:

Private Sub DataGridView1_ButtonClick(sender As DataGridView, e As DataGridViewCellEventArgs) _
                                      Handles DataGridView1.CellButtonClick
    'TODO - Button Clicked - Execute Code Here
End Sub

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • ASUS

    ASUS

    22 EKİM 2005
  • ICON

    ICON

    19 EKİM 2011
  • kruno j

    kruno j

    6 Mayıs 2007