Binden Sie Datatable mit DataGrid in WPF und MVVM

Post a reply

Smilies
:) :( :oops: :chelo: :roll: :wink: :muza: :sorry: :angel: :read: *x) :clever:
View more smilies

BBCode is ON
[img] is ON
[flash] is OFF
[url] is ON
Smilies are ON

Topic review
   

Expand view Topic review: Binden Sie Datatable mit DataGrid in WPF und MVVM

by Anonymous » 29 Dec 2024, 09:04

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!

Top