Im folgenden Beispiel _selectedMessage enthält die ursprünglichen Werte und selectedMessage enthält die geänderten Werte, die ich auf die in _selectedMessage enthaltenen Werte zurücksetzen möchte (
Code: Select all
_selectedMessage
Dies wäre der einfachste Weg, außer dass es nicht funktioniert:
Code: Select all
selectedMessage = _selectedMessage;
Code: Select all
selectedMessage.Subject = _selectedMessage?.Subject;
Code: Select all
PropertyInfo[]? properties = _selectedMessage?.GetType().GetProperties();
if (properties != null)
{
foreach (PropertyInfo property in properties)
{
// Get the name and value of each property
string? propertyName = property.Name;
object? propertyValue = property.GetValue(selectedMessage);
selectedMessage?.GetType().GetProperty(propertyName)?.SetValue(selectedMessage, propertyValue);
}
}
Was könnte ich falsch machen?Um etwas Kontext dazu hinzuzufügen, warum ich das mache, habe ich ein Blazor WASM QuickGrid, das die Liste der Datensätze anzeigt:
[img]https:/ /i.sstatic.net/oTKHaKoA.png[/img]
Wenn der Benutzer dann einen Datensatz ohne die unten hinzugefügte Lösung öffnet, werden alle Änderungen am Datensatz sofort im Raster dahinter widergespiegelt, sodass das Formular zwar über Schaltflächen zum Speichern und Abbrechen verfügt, während zum Abbrechen Schaltflächen vorhanden sind Aktualisiert die Datenbank nicht, sondern lässt den Datensatz so aussehen, als wäre er im Raster geändert worden. Ich muss also abbrechen, um ihn wiederherzustellen:
[img]https://i .sstatic.net/Um8FQVQE.png[/img]
Was ich jetzt mache, ist, das Objekt auf das temporäre Objekt zu klonen, wenn das Bearbeitungsformular geöffnet wird, das temporäre Objekt für das Formular als Ziel auszuwählen und dann, nachdem ich bestätigt habe, dass die Remote-API-Datenbank gespeichert wurde Erfolgreich, Festlegen der Hauptobjekteigenschaften auf die temporären Eigenschaften. Auf diese Weise wird das Raster nicht verändert, sodass Abbrechen das Formular jetzt einfach schließen kann.