DataBinding mit DataTable

KCH

Grünschnabel
Hallo!

Ich benutze als Entwicklungsumgebung VS2005 und als Programmiersprache vb.net

Dabei habe ich ein kleines Problem mit der Bindung von Werten aus einem DataTable an eine Text Box. Also ich initialisiere mein DataTable wie folgt:
Code:
 Me.dataTableOrder.BeginInit()
 Me.dataTableOrder.Columns.Add("ProductID", GetType(System.Int32))
 Me.dataTableOrder.Columns.Add("Quantity", GetType(System.Double))
 Me.dataTableOrder.Columns.Add("Producer", GetType(System.String))
 Me.dataTableOrder.Columns.Add("Description", GetType(System.String))
 Me.dataTableOrder.Columns.Add("UnitPrice", GetType(System.Double))
 Me.dataTableOrder.Columns.Add("TotalPrice", GetType(System.Double), "Quantity * UnitPrice")
 Me.dataTableOrder.EndInit()

Jetzt fülle ich eben mein DataTable mit bestimmten Werten - soweit alles kein Problem, hab das mit einem DataGridView getestet, die Werte werden anstandslos übernommen und auch die TotalPrice Spalte wird als Produkt von Quantity und UnitPrice korrekt angezeigt.

Wenn ich jetzt aber eine TextBox hinzufüge:
Code:
 Me.SuspendLayout()
 Dim txtDescription As New TextBox
 txtDescription.Location = New System.Drawing.Point(320, 100)
 txtDescription.Name = "txtDescription"
 txtDescription.Size = New System.Drawing.Size(144, 20)
 txtDescription.DataBindings.Add _
       (New Binding("Text", dataTableOrder.Rows(0), "Description"))
 txtDescription.ReadOnly = True
 Me.Controls.Add(txtDescription)
 Me.ResumeLayout()
Dann erhalte ich die Fehlermeldung "An die Eigenschaft oder Spalte Description für die DataSource kann nicht gebunden werden.
Parametername: dataMember"

Habt ihr vielleicht eine Erklärung dafür oder könnt mir eine Lösung anbieten? wäre sehr nett ;) Danke schonmal!
 

KCH

Grünschnabel
Okay mittlerweile hab ich verstanden, dass man mit einem datatable objekt nicht an eine bestimmte zeile binden kann, sondern nur auf die gerade asugewählte zeile. aus diesem grund hab ich mir jetzt ein dataview objekt definiert:
Code:
Me.dataViewOrder = New DataView(dataTableOrder)

Könnte mir jemand sagen, wie man es bewerkstelligen kann, dass bei Änderung eines Wertes (speziell: den Amount Wert) die Änderungen direkt übernommen werden?

Also um das ganze zu konkretisieren: für jede Zeile wird ein NumericUpDown Objekt hinzugefügt:
Code:
For i as integer = 0 To Me.dataViewOrder.Count - 1
.
.
.
            Dim nudAmount As New NumericUpDown
            nudAmount.Location = New System.Drawing.Point(104, intOffset)
            nudAmount.Name = "nudAmount" & i.ToString
            nudAmount.Size = New System.Drawing.Size(48, 20)
            nudAmount.Minimum = 1
            nudAmount.Maximum = 1000
            nudAmount.Increment = 1
            nudAmount.DataBindings.Add _
                (New Binding("Value", Me.dataViewOrder(i), "Quantity"))
            AddHandler nudAmount.ValueChanged, AddressOf Me.nudValueChanged
.
.
.
Next

Kann mir jemand sagen, wie ich diesen Handler Me.nudValueChanged definieren muss, damit die Änderungen direkt nach dem Ändern des Wertes übernommen werden?

Und nochwas: Wenn ich den Amount ändere dann ändert sich auch der Wert TotalPrice im DataView, allerdings wird das Binding an die txtTotalPrice nicht aktualisiert. Woran liegt das und wie kann man das ändern?