C# WPF DataGrid neue Zeile einfügen at runtime

antaro

Cadet 3rd Year
Registriert
Sep. 2012
Beiträge
41
Hallo

ich habe ein dataGrid, dass die Daten aus einer gemappten
Liste (Verweis auf SQL Tabelle) darstellt.
Nun möchte ich manuell (at runtime) neue Zeilen/Daten einfügen.

Die eingefügten Daten müssen aus dem Grid ausgelesen/gecastet
werden und in die SQL-Tabelle geschrieben werden.

Leider funktioniert das Auslesen neu eingegebener Daten nicht.

Code:
  IcaoItem dataRow = (IcaoItem)dgrMain.SelectedItem;

        //oder

	IcaoItem dataRow = e.Row.DataContext as IcaoItem;

dataRow wird nur gefüllt, wenn SelectedItem auf eine bereits
vorhandene Zeile zeigt (z.B. für Update). Bei einer neu
eingegebenen Zeile (Add) sind alle Felder in dataRow == null.

Was kann ich machen, um dataRow mit den neuen Daten zu füllen,
um eine Add-Funktion zu realisieren ?


mehr Code:

Code:
 private void dgrMain_RowEditEnding(object sender, DataGridRowEditEndingEventArgs e)
        {
            if (e.EditAction == DataGridEditAction.Commit)
            {
                IcaoItem iItem = e.Row.DataContext as IcaoItem;
                
                var matchedData = (from icItem in ic.Icaos
                                   where icItem.ID == iItem.ID
                                   select icItem).SingleOrDefault();

                //Insert New DataRow   <-- funktioniert nicht
                if (matchedData == null)
                {
                                      
                    IcaoItem p = new IcaoItem();

                    p.ID = ic.Icaos.Count() + 1;
                    p.IcaoName = iItem.IcaoName;
                    p.Apt = iItem.Apt;
                    p.City = iItem.City;
                    p.Country = iItem.Country;

                    
                    ic.Icaos.InsertOnSubmit(p);
                    ic.SubmitChanges();
                }



  		//Update DataRow   <-- funktioniert
                else
                {
                    matchedData.IcaoName = iItem.IcaoName;
                    matchedData.Apt = iItem.Apt;
                    matchedData.City = iItem.City;
                    matchedData.Country = iItem.Country;

                    ic.SubmitChanges();

                    
                    lblCrudStatus.Content = "Row updated successfully!";

                }
            }
        }



       // ic.Icaos ist die gemappte Liste


Vielleicht gibt es eine Lösung ohne MVVM, da ich noch keine Erfahrung damit habe.



Vielen Dank.
 
Ich habe die Applikation mit MVVM neu geschrieben. Jetzt funktioniert alles.
 
Zurück
Oben