Entwickler-Ecke

WinForms - ListBox aktualisieren nach Close Event


mo78 - Di 28.02.12 13:40
Titel: ListBox aktualisieren nach Close Event
Hallo,
Mein Problem ist folgendes ich habe eine List<string> die als datasource an eine Listbox gebunden ist.
Beim anwählen der Listbox einträge wird über einen event der Ausgewählte eintrag an eine Methode übergeben welche dann anhand des ausgewählten eintrages einen Datensatz aus der DB liest und in entsprechende Texboxen schreibt. Das passiert alles in Form1

Hier mal der Code von Form1

C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
public Form1(){
  InitializeComponent();
  db = new DBclass();
  liste = new List<string>();
}

private void dbConnect_Click(object sender, EventArgs e){
  liste = db.getListe();
  listBox1.DataSource = kundenListe;   
}

protected void listBox1_SelectedIndexChanged(object sender, EventArgs e){
  if(listBox1.DataSource!=null)
    updateTextboxes(listBox1.SelectedItem.ToString());
}

private void updateTextboxes(string value){
  listenEintrag = value;
  db.loadDaten(listenEintrag);
  tb1.Text = db.daten[0];
  tb2.Text = db.daten[1];
  tb2.Text = db.daten[2];
}

private void bt_edit_Click(object sender, EventArgs e) {
  form2 = new Form2(this);
  form2.Show();
}

public List<string> Liste {
  get { return liste;}
  set { this.liste = value;}   
}


Und so siehts in Form2 aus

C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
private Form1 form1 = null;

public Form2(f1) {
  InitializeComponent();
  db = new DBclass();
  f3Liste = new List<string>();
  this.form1 = f1;
}

private void btSave_Click(object sender, EventArgs e){
  db.edit(tb1.Text, tb2.Text, tb3.Text));
}

private void Form2_FormClosed(object sender, FormClosedEventArgs e) {
  f3Liste = db.getListe();
  this.form1.Liste = f3Liste;            
  this.form1.Refresh();
}


Wenn ich btSave anklicke dann wird der Datensatz auch geändert, nur wenn ich dann Form2 schließe ist in der Listox die Änderung nicht zu sehen, und wenn dann einen eintrag in der list auswähle
bekomme ich auf updateTextboxes(listBox1.SelectedItem.ToString()) eine NullReferenceException.

Naja und da komme ich nun nicht weiter.

Schonmal besten Dank für jegliche Hilfe.

mfg mo

Moderiert von user profile iconTh69: Code- durch C#-Tags ersetzt


Ralf Jansen - Di 28.02.12 14:06

Du weißt zwar der Liste Property eine neue List<string> Instanz zu aber wie soll die dann plötzlich in der UI auftauchen? Da du scheinbar Databinding verwendest werden alle entsprechend gebunden Controls weiterhin auf die alte List<string> Instanz schauen. Du mußt die neue List<string> Instanz an deine Controls binden. Am besten im Setter der Liste Property.


mo78 - Di 28.02.12 14:15

Ahh besten Dank jetzt funzt es.
Und ist natürlich auch logisch.

mfg
mo