C# Datagridview/Datenbank bearbeiten mit Button?
Hallo, ich versuche gerade Einträge in einem Datagridview zu bearbeiten. Ich habe also das Datagridview, einen Bearbeiten Button und eine zweite Form die sich beim klicken auf den Bearbeiten Button öffnet. Ich wähle also einen Eintrag im Grid aus z.B. mit ID: 1 Vorname: Max Nachname: Mustermann. Dann steht im sich öffnenden Fenster nach dem klick auf bearbeiten die ID: 1 Vorname: Max Nachname: Mustermann alles in einer eigenen Textbox, genauso wie ich es haben will. Jetzt ist aber das Problem, wenn ich den Namen z.B. auf Musterfrau ändern will und auf Ok klicke ändert sich der Name im Grid nicht zu Musterfrau sondern bleibt unverändert bei Mustermann.
Bearbeiten Button in der ersten Form:
private void buttonBearbeiten_Click(object sender, EventArgs e)
{
var selectedRow = PersonDataGridView.SelectedRows[0];
var selectedPerson = (Person)selectedRow.DataBoundItem;
var dlg = new PersonDialog();
dlg.BindPerson(selectedPerson);
dlg.ShowDialog();
if (dlg.DialogResult == DialogResult.OK)
{
var person = dlg._selectedPerson;
//_db.EditPerson(person);
_db.SaveChanges();
füllen();
}
}
}
DbContext:
public DbSet<Person> Personen { get; set; }
public void EditPerson(Person person)
{
//Wie bearbeite ich eine Person
//Beim hinzufügen ist es ja z.B. Personen.Add()
}
BindPerson-Methode und Ok Button in der zweiten Form(zweite Form wird nach klick auf Bearbeiten Button geöffnet):
public Person _selectedPerson;
public void BindPerson(Person selectedPerson)
{
textBoxID.Text = selectedPerson.Id.ToString();
textBoxVorname.Text = selectedPerson.Vorname;
textBoxName.Text = selectedPerson.Name;
textBoxStrasse.Text = selectedPerson.Straße;
textBoxHausnummer.Text = selectedPerson.Hausnummer.ToString();
textBoxWohnort.Text = selectedPerson.Wohnort;
textBoxPLZ.Text = selectedPerson.PLZ.ToString();
_selectedPerson = selectedPerson;
}
private void buttonOK_Click(object sender, EventArgs e)
{
var id = Convert.ToInt32(textBoxID.Text);
var vorname = textBoxVorname.Text;
var name = textBoxName.Text;
var straße = textBoxStrasse.Text;
int hausnummer = Convert.ToInt32(textBoxHausnummer.Text);
var wohnort = textBoxWohnort.Text;
int plz = Convert.ToInt32(textBoxPLZ.Text);
_selectedPerson.Id = id;
_selectedPerson.Vorname = vorname;
_selectedPerson.Name = name;
_selectedPerson.Straße = straße;
_selectedPerson.Hausnummer = hausnummer;
_selectedPerson.Wohnort = wohnort;
_selectedPerson.PLZ = plz;
Close();
}
Was muss ich in meine EditPerson-Methode schreiben damit die Änderungen im Grid sichtbar sind?
Danke euch.
1 Antwort
Jeder Datensatz sollte eine ID haben. Mit dieser ID "findest" du im Grid deinen Eintrag ( .Item[x] ) den es zu ändern gilt. Je nach dem wie dein Grid weiter aufgebaut ist wirst du über "SubItem" an die Stelle hangeln, die dem Namen entspricht um dann die Änderung über das .Text Attribut zuweisen zu können. Sofern es eine Datenbank ist das Grid repräsentiert die Visualisierung einer SQL DB kannst du auch direkt in der DB die Änderung vornehmen und dann das Grid komplett neu laden. Dies geht allerdings mit einem kompletten Bildschirm refresh einher was länger dauert und dem End User ggf nicht so gefällt.