DataSet mit Binding editieren

06/09/2008 - 19:31 von Thomas Schmidleithner | Report spam
Hallo,

ich habe ein DataSet welches an eine Listbox gebunden ist. Ich brauche
jedoch die Funktionalitàt, die Elemente in der ListBox zu verschieben
und dabei der OrderIndex in dem DataSet (bzw. spàter in der Datenbank)
zu speichern. Dazu habe ich zwei Buttons erstellt:
- Button nach oben:
Wird dieser Button geklickt, wird der OrderIndex mit dem Item
SelectedIndex-1 vertauscht.

- Button nach unten:
Wird dieser Button geklickt, wird der OrderIndex mit dem Item
SelectedIndex+1 vertauscht.

Im Code sieht das folgendermaßen aus (in dem Beispiel Button nach
oben):
DataRow rowOld = dataSet.Tables["Objects"].Rows[iIndex];
rowOld["OrderIndex"] = iObjectIndexNew;

DataRow rowNew = dataSet.Tables["Objects"].Rows[iIndex1];
rowNew["OrderIndex"] = iObjectIndexOld;

Das Funktioniert soweit auch, das DataSet stellt Changes fest und ich
kann das ganze in der Datenbank speichern. Mein Problem ist jetzt
allerdings das es nicht richtig in der ListBox angezeigt wird. Es
sieht so aus als ob da kein PropertyChanged Event aufgerufen wird.

Gibt es da eine andere Möglichkeit?

Gruß,
Tom
 

Lesen sie die antworten

#1 Frank Dzaebel
07/09/2008 - 10:57 | Warnen spam
Hallo Thomas,

[...] Das Funktioniert soweit auch, das DataSet stellt Changes
fest und ich kann das ganze in der Datenbank speichern.
Mein Problem ist jetzt allerdings das es nicht richtig in der
ListBox angezeigt wird. Es sieht so aus als ob da kein
PropertyChanged Event aufgerufen wird.
Gibt es da eine andere Möglichkeit?




Hier eine Möglichkeit, wenn das DataSet normal
über BindingSource und TableAdapter (quasi automatisch)
erstellt wurde und die Darstellung über die Sort-Eigenschaft
des BindingSource erzeugt wird:


// this.objectsBindingSource.DataMember = "Objects";
// this.objectsBindingSource.DataSource = this.meinDataSet;
// this.objectsListBox.DataSource = this.objectsBindingSource;

private void Form1_Load(object sender, EventArgs e)
{
this.objectsTableAdapter.Fill(this.meinDataSet.Objects);
objectsBindingSource.Sort = "OrderIndex";
}

private void btnSwapRows_Click(object sender, EventArgs e)
{
if (objectsListBox.SelectedIndex <= 0) return;
SwapRowOrderIndex(meinDataSet.Objects,
objectsListBox.SelectedIndex - 1,
objectsListBox.SelectedIndex);
}

private void SwapRowOrderIndex(DataTable dt, int row1, int row2)
{
string orderIndex = "OrderIndex";
DataRowView sel1 = objectsBindingSource[row1] as DataRowView;
long index1 = (long)sel1[orderIndex]; // je nach DB-Typ
DataRowView sel2 = objectsBindingSource[row2] as DataRowView;
long index2 = (long)sel2[orderIndex];
sel1.Row[orderIndex] = index2;
sel2.Row[orderIndex] = index1;
}

private void objectsBindingNavigatorSaveItem_Click(
object sender, EventArgs e)
{
this.Validate();
this.objectsBindingSource.EndEdit();
this.tableAdapterManager.UpdateAll(this.meinDataSet);
}


ciao Frank
Dipl.Inf. Frank Dzaebel [MCP/MVP C#]
http://Dzaebel.NET

Ähnliche fragen