2010-07-27 55 views
16

BindingList'e (C# Windows Forms) bağlı bir DataGridView var. Listedeki bir öğedeki değerlerden birini değiştirirseniz, kılavuzda hemen görünmez. Değiştirilen hücreyi tıklatırsam veya simge durumuna küçültürsem, pencereyi doğru şekilde güncelleştirir, ancak otomatik olarak gerçekleşmesi gerekir. BindingList'e bağlı olan DataGridView, değer değiştiğinde yenilenmiyor

Aynı sorun daha önce vardı, ama bu durumda ben değeri değişti aynı anda hücrenin arka plan rengini değiştirmek zorunda kaldı. Bu, hücrenin doğru şekilde yenilenmesine neden oldu. Ne olduğunu işe alabilirsiniz

tek yolu ...

dataGridView.DataSource = null; 
dataGridView.DataSource = myBindingList 

... ama gerçekten o kaydırma çubuğu başa dön pop yapar ve bu demektir bu önlemek isterim Hücre arka plan renklerini tekrar ayarlamak zorundayım. Elbette daha iyi bir yol var. Yenileme (ana sayfayı yenilemenin yanı sıra), Güncelleme ve Geçersiz Kılma'yı denedim, ancak ihtiyacım olanı yapmıyorlar.

Birkaç mesaj panoları üzerinde belirtilen bu sorunu gördüm ama henüz buna bir çalışma cevap görmedim.

cevap

1

Nesne Değiştir bildiriminiz tetiklenmediği/doğru işlenmediği anlamına gelir. Kişisel olarak her zaman bir dataGridView'a bağlanırken BindingSource nesnesini kullanırım.

Ben DataGridView FAQ ve DataBinding FAQ kontrol etmek ve nesne değişikliği bildirimi için arama olacaktır.

sen ADO.Net kullanıyorsanız

, çağrıyı .Validate() ve .EndEdit() yöntemleri unutma. Liste öğesi türü INotifyPropertyChanged arabirimini uygulaması halinde öğe değeri değişiklikler için

0
private void refreshDataGrid() 
    { 
     dataGridView1.DataSource = typeof(List<>); 
     dataGridView1.DataSource = myBindingList; 
     dataGridView1.AutoResizeColumns(); 
     dataGridView1.Refresh(); 
    } 

Sonra sadece diyoruz. İşte bir Koleksiyona bir DataGridView bağlama bir öğretici

3

INotifyPropertyChanged! BindingList herhangi bir değişiklik INotifyPropertyChanged uygulamalıdır

+0

Evet ... çalışmıyor. –

4

Kişisel veri kaynağı DataGridView yansıtılması.

class Books : INotifyPropertyChanged 
{ 
    private int m_id; 
    private string m_author; 
    private string m_title; 

    public int ID { get { return m_id; } set { m_id = value; NotifyPropertyChanged("ID"); } } 
    public string Author { get { return m_author; } set { m_author = value; NotifyPropertyChanged("Author"); } } 
    public string Title { get { return m_title; } set { m_title = value; NotifyPropertyChanged("Title"); } } 


    public event PropertyChangedEventHandler PropertyChanged; 

    private void NotifyPropertyChanged(string p) 
    { 
     if (PropertyChanged != null) 
      PropertyChanged(this, new PropertyChangedEventArgs(p)); 
    } 
} 

BindingList<Books> books= new BindingList<Books>(); 

datagridView.DataSource = books; 
+0

Bu mükemmeldi. Çok teşekkür ederim.MSDN, kod örneklerini yapmak için StackOverflow ile sözleşme yapmalıdır; Microsoft'un istenmesi gereken çok şey var ("İşte size yardımcı olmayan bir kod satırı ...") – curob

+0

Genius. Çok zaman ve kod tasarrufu. 'PropertyChanged' bilinmeyen winforms işe yaramaz. Çok teşekkür ederim! – C4u