BRAINDUMP: Zeilenänderungen im WindowsForms-DataGridView erkennen und speichern

Gerade eben hab ich mir nen Wolf gesucht. Situation: DataGridView in Windows-Forms-Applikation auf das Formular gezogen, per automatisch generierter Datenquelle an Datenbank gebunden – und dann der untaugliche Versuch, die Daten nach dem Editieren im DataGridView gepflegt wieder wegspeichern zu lassen. Untauglich deshalb, da es keine geeigneten Events gibt – weder auf Ebene der DataTable, noch des DataGridViews, noch der Datenquelle.

Nach ein wenig rumgooglen hab ich eine Lösung gefunden: An das PositionChanged-Ereignis der BindingSource binden und dort dann die jeweils letzte Zeile speichern. Könnte dann so aussehen:

private DataRow _lastRow;

public DataRow LastRow
{
   get { return _lastRow; }
   set { _lastRow = value; }
}

///

/// Wird aufgerufen, wenn sich die Position
/// des Cursors geändert hat
///

private void BindingSource_PositionChanged(
   object sender, EventArgs e)
{
   // Bindingsource herausfinden
   BindingSource source = ((BindingSource)sender);

   // Aktuelle Zeile herausfinden
   DataRow currentRow = ((DataRowView)source.Current).Row;

   // Mit letzter Zeile vergleichen
   if (currentRow.Equals(LastRow))
   {
      return;
   }

   // Daten aktualisieren
   if (null != LastRow)
   {
      if (LastRow.RowState == DataRowState.Modified)
      {
          // Updaten der Daten
          // …
      }
      else if (LastRow.RowState == DataRowState.Added)
      {
         // Hinzufügen der Daten
         // …
      }
   }

   // Aktuelle Spalte merken
   LastRow = currentRow;
}

Also, irgendwie nervt mich das. Ich werd wohl wieder auf das Click- bzw. DoubleClick-Ereignis des DataGridViews reagieren und dann den aktuellen Datensatz in einem neuen Fenster anzeigen und bearbeiten lassen. Macht sich alles deutlich einfacher.

1 Comment so far

  1. bjtfdmmf on Dezember 22nd, 2007

    baudchyr [URL=http://pyoajmgo.com]wkpefsau[/URL] kcpeylwj http://tqybjfet.com vrfcjnau mkhhblzj