VB.NET 2010 RowImport

Hallo zusammen

ich habe ein Problem mit der Funtion .RowImport des Datatable-Objektes
und zwar folgender code

 Private Sub \_AddItem(ByVal Value As DataRow)
 If Not IsNothing(Value) Then
 If mDatatable Is Nothing Then
 mDatatable = New DataTable
 End If

 mDatatable.ImportRow(Value)
 End If
 End Sub

 Public Sub AddItem(ByVal Value As DataRow)
 Call \_AddItem(Value)
 Refresh()
 End Sub

 Public Sub AddItem(ByVal Value As DataTable)
 For Each DR As DataRow In Value.Rows
 \_AddItem(DR)
 Next
 'mDatatable = Value
 Refresh()
 End Sub

kleine Erklärung:
über die Funktion AddItem kann eine ganze Datatable oder einzelen Datarows an die klasse übergeben werden wobei einzelne Datarows zu einer anderen Datatable gehören können weshalb ich sie nicht einfach so der lokalen Datatable hinzufügen kann. Also hab ich es mit ImportRow versucht was auch fehlerfrei funktioniert. Das heißt es werden keine Fehlermeldungen ausgegeben oder sowas. In der lokalen Datatable kommen auch alle Datarows an aber ohne den Columns. Es sollten irgendwas um die 30 sein. Folglich kommen irgendwie auch keine Daten im entsprechenden Datagridview an.

Ich hoffe mir kann jemand ein Tipp geben wie ich hier weiter komme.

vielen Dank

Enrico

Hallo Erico.

 Private Sub \_AddItem(ByVal Value As DataRow)
 If Not IsNothing(Value) Then
 If mDatatable Is Nothing Then
 mDatatable = New DataTable '

Ich kenne mich mich DataTables nicht extrem gut aus, aber ich denke, wenn mDataTable Nothing ist und dann = New DataTable gesetzt wird, hat mDataTable keine einzige Spalte. Meine Vermutung: Du mußt in der New-Prozedur der Klasse eine Überprüfung starten, ob mDataTable schon Spalten enthält und falls nicht, die erforderlichen Spalten hinzufügen. Dies wiederum ist aber auch mit Vorsicht zu genießen, wenn Du die Klasse serialisierbar
gemacht hast, um sie in einer Datei zu speichern.

Wie gesagt: das ist eine Vermutung. Mir ist nicht bekannt, was alles in Deiner Klasse enthalten ist. Gehört mDataTable z.B. zu einem typisierten DataSet, oder ist mDataTable einfach nur ein "StandAlone"-DataTable, der in der Klasse als Private deklariert wurde?

Möglicherweise reicht es schon, wenn Du anstatt mit ImportRow mit "mDataTable.Rows.Add(Value)" arbeitest.

VG
Carsten

Hallo Carsten,

vielen Dank erstmal für Deine Mühe.

Datatable wird tatsächlich erst dann initializiert wenn sie gebraucht wird, das ist auch so gewollt. die Datatable selbst dient später als Datasource für ein Datagridview. Die klasse selbst ist einfach gehalten und soll mir die Möglichkeit mehr Elemente anzuzeigen als dies in einer Listbox möglich wäre.

Möglicherweise reicht es schon, wenn Du anstatt mit ImportRow mit :„mDataTable.Rows.Add(Value)“ arbeitest.

das hab ich als erstes Versucht aber ich erhalte da die Fehlermeldung, das die Datarow (->Value) bereits zu einer anderen datenquelle gehört.
Ich könnte natürlich über die Datarow erfahren wie die Column-Names sind das problem dabei ist, es ist nicht sicher ob die einzufügenden Daten überhaupt von einer anderen datatable stammen. Bau ich alles so um das ich die Columns aus der Ursprungsdatatable hole lauf ich gefahr das es vllt keine Datatable gibt -> Exception. Wobei ich mir grad überlege ein zweites Argument mit einzubauen in dem die Column-Name festgelegt werden…

ich mach das mal, meld mich dann nochmal :smile:

Enrico