Binden Sie Datatable mit DataGrid in WPF und MVVMC#

Ein Treffpunkt für C#-Programmierer
Anonymous
 Binden Sie Datatable mit DataGrid in WPF und MVVM

Post by Anonymous »

Ich bin neu bei WPF, ich verwende das MVVM-Muster in WPF und erzeuge zur Laufzeit eine Datatable-Struktur und binde dann Datatable mit DataGrid/RadGridView, was wie erwartet funktioniert.

Problem: Ich möchte, dass DataGrid/RadGridView konfigurierbar ist (wo der Benutzer eine neue Zeile hinzufügen, eine Zeile löschen und die Daten bearbeiten kann) und beim Klicken auf die Schaltfläche „Speichern“ alles in der Datenbank gespeichert werden soll. Ich habe eine Situation, in der ich eine leere DataTable mit verschiedenen Spalten erstellen muss (abhängig von der Benutzereingabe). Geben Sie dann Werte in diese Spalten ein und klicken Sie dann auf „Speichern“, um den Wert in der Datenbank zu speichern. Ich kann DataTable an DataGrid binden (ich kann alle Spaltennamen und Datenzeilen sehen, wenn bereits Daten in der DataTable im Raster vorhanden sind), kann aber zur Laufzeit keine Zeile aus DataGrid hinzufügen (eingeben) oder löschen . Ich habe den Wert „True“ für CanUserDeleteRows und CanUserInsertRows festgelegt. Ich bin mir nicht sicher, wo ich falsch liege. Ich implementieren INotifyPropertyChanged in meiner ViewModel-Klasse.

Ich habe Mühe, das gewünschte Ergebnis zu erhalten.

Mein Code sieht wie folgt aus:

ViewModel--

Code: Select all

    DataTable _manualDataTable;
public DataTable ManualDataTable
{
get
{
return _manualDataTable;
}
set
{
_manualDataTable = value;
OnPropertyChanged("ManualDataTable");
}
}
Zum Erstellen von DataTable--

Code: Select all

    void LoadManualDataTable()
{
DataTable dtData = new DataTable();
dtData.Columns.Add("TimeStamp", typeof(DateTime));
List columns = new List();
var query = _dataContext.GetSenData().Where(sen => sen.LogID == ((DataLogs)SelectedItemNode).Logger.LogID).Select(sen => sen.SeriesID);
var queryTS = _dataContext.GetDataSeries().Where(ts => query.Contains(ts.SeriesID));
foreach (DataSeries ts in queryTS)
{
var queryPLoc = _dataContext.GetDataLoc().Where(pLoc => pLoc.ParamID == ts.ParamID).Select(pLoc => pLoc.Name);
dtData.Columns.Add(queryPLoc.First(), typeof(string));
}

ManualDataTable = dtData;
}
XAML-Code--

Code: Select all

     
DataTable wird wie erwartet erstellt (von der LoadManualDataTable-Methode) und wenn ich über den Code eine Zeile hinzufüge, werden diese Zeilen gebunden und in DataGrid angezeigt. Aber ich kann über DataGrid keine Zeilen erstellen oder löschen.

Jede Hilfe wird sehr geschätzt.

Dank im Voraus!

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post