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--
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!
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] DataTable _manualDataTable;
public DataTable ManualDataTable
{
get
{
return _manualDataTable;
}
set
{
_manualDataTable = value;
OnPropertyChanged("ManualDataTable");
}
}
[/code]
Zum Erstellen von DataTable--
[code] 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;
}
[/code]
XAML-Code--
[code]
[/code]
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!