2009-03-10 8 views
1

Angenommen, die DataGridView Eigenschaft ist auf eine DataView Instanz festgelegt.Korrekte Art und Weise, in der ein DataGridView Änderungen in seiner DataSource visuell widerspiegelt

DataGridView dgv; 
DataTable dt; 

// ... dt gets populated. 

DataView dv = dt.DefaultView; 

dgv.DataSource = dv; 

// ... dt gets modified 

// The DataGridView needs to update to show these changes visually 
// What goes here? 

Ich weiß, Sie dgv.DataSource zu null, dann wieder auf dv einstellen könnte. Aber das scheint ziemlich seltsam zu sein. Ich bin mir sicher, dass es noch ein paar andere Möglichkeiten gibt. Aber was ist der richtige, offizielle Weg, dies zu tun?

Antwort

4

Der richtige Weg ist für die Datenquelle IBindingList zu implementieren, Rückkehr true für SupportsChangeNotification und ListChanged Veranstaltungen ausstellen. Allerdings AFAIK, ein DataViewtut dieses ...

2

Ich bin ziemlich sicher, dass, wenn Sie Datagridview auf die Standardansicht eines Datatable gebunden ist, und die Tabelle ändert, werden die Änderungen automatisch in der Datagridview reflektiert . Hast du das versucht und hast Probleme? Veröffentlichen Sie den Code, der die DataTable aktualisiert, möglicherweise ist etwas anderes falsch. In der Tat, hier ist eine kleine Probe app, die ich gerade geschrieben:

public partial class Form1 : Form 
    { 
     private DataTable table; 

     public Form1() 
     { 
      InitializeComponent(); 
      table = new DataTable(); 
      this.LoadUpDGV(); 
     } 

     private void LoadUpDGV() 
     { 
      table.Columns.Add("Name"); 
      table.Columns.Add("Age", typeof(int)); 

      table.Rows.Add("Alex", 27); 
      table.Rows.Add("Jack", 65); 
      table.Rows.Add("Bill", 22); 
      table.Rows.Add("Mike", 36); 
      table.Rows.Add("Joe", 12); 
      table.Rows.Add("Michelle", 43); 
      table.Rows.Add("Dianne", 67); 

      this.dataGridView1.DataSource = table.DefaultView; 
     } 

     private void button1_Click(object sender, EventArgs e) 
     { 
      table.Rows.Add("Jake", 95); 
     } 
    } 

Grundsätzlich, wenn das Formular geladen auf, es füllt nur die Tabelle mit Namen und Alter. Dann bindet es das an die DGV. Wenn Sie auf die Schaltfläche klicken, wird der DataTable selbst eine weitere Zeile hinzugefügt. Ich habe es getestet, und tatsächlich ist es ohne Probleme im Raster aufgetaucht.

Verwandte Themen