multistorm
Goto Top

DataTable aus DataGridView Erstellen

Möchte aus einem DataGridView ein DataTabele erstellen. (VB.NET 2008)

Hallo alle zusammen,
gibt es ne möglichkeit aus einem DataGridView ein DataTabele zu erstellen ?
Mir ist klar das ich das sicher über Schleifen usw. Kapieren kann aber gibt es da nicht ein .NET Hausmittel dafür ...
bin eigentlich kein großer Fan von diesen Schleifen Kopier Geschichten ...

Habe im internet folgendes Gefunden:

How to get a DataSet from DataGrid
http://social.msdn.microsoft.com/Forums/en/adodotnetdataset/thread/0a8c ...

aber leider werde ich aus dem was die Schreiben nicht wirklich schlau. Allerdings scheint es hier funktioniert zu haven --> Rahtlosigkeit
Hat jemand da eine Idee ?

Content-ID: 144329

Url: https://administrator.de/contentid/144329

Ausgedruckt am: 22.11.2024 um 12:11 Uhr

14695
14695 07.06.2010 um 16:46:24 Uhr
Goto Top
Hi,

nicht das ich wüsste. Aber warum erstellst du nicht eine DataTable und legst die DataGridView.DataSource-Eigenschaft entsprechend fest.

Ansonsten kommst du wohl um deine gehassten Schleifen nicht herum (Beispiel für ein DGV mit einer Spalte):

DataGridViewRowCollection coll = dataGridView1.Rows;

DataTable t = new DataTable();
t.Columns.Add();
foreach (DataGridViewRow item in coll)
{
     t.Rows.Add(item.Cells.Value);	
}
14695
14695 07.06.2010 um 16:54:20 Uhr
Goto Top
Nochmal ich, nachdem du deinen Beitrag erweitert hast.

Scheinbar fehlen Dir grundlegende Kenntnisse zum DataGridView und der Darstellung von Daten darin. Lies mal das hier DataGridView.DataSource. Das hilft bestimmt weiter.

Grüße
MultiStorm
MultiStorm 07.06.2010 um 17:08:31 Uhr
Goto Top
naja, weil einige spalten im Grid erst beim Füllen ermittelt bzw. berechnet werden, da hängen ein paar funktionen hinter die nicht per SQL realiesiert sind.
ist das C# was du gepostet hast ?

naja das mit der schleife ist eigentlich quatsch,
da das DT bzw. DS an eine Export Funktion übergeben werden soll und daort laufen wieder schleifen alles durch, ich denek ich werde mit für diese Funktion einfach eine Überladung schreiben und das Komplette Grid einfach übergeben
MultiStorm
MultiStorm 07.06.2010 um 17:16:43 Uhr
Goto Top
ja das war ja auch mein Erster gedanke:

Dim dt as DataTable

set dt = new DataTabel

dt = DataGridView.Datasource

Fertig !

Ha ha,
klapt aber nicht,
so wie cih aber den post von dir interpretiere sollte das so funktionieren

'Deklaration

Public Property DataSource As Object

'Verwendung

Dim instance As DataGridView
Dim value As Object

value = instance.DataSource

instance.DataSource = value


ein datatable ist doch auch nur ein Objekt ....

also was ist Falsch,
wenn ich das DT übergebe hat das dt = nothing ...

Funktioniert das vieleicht nur wenn das Gird auch über die DataSource eigenschaft gefüllt wurde ?
Den ich fülle das Gird per schleife wegen der zusätzlichen Berechnungen ..
MultiStorm
MultiStorm 07.06.2010 um 17:46:44 Uhr
Goto Top
Scheint so zu sein,
DataGridView.DataSource = Nothing ...
Scheint also nur zu Funzen, wenn es darüber auch gefüllt wurde.
14695
14695 08.06.2010 um 09:20:24 Uhr
Goto Top
Hi,

1. Ja, das ist C#. Die Übersetzung von C# nach VB und umgekehrt sollte aber nicht soo ein großen Problem darstellen.
2. Nein, meinen Post hast du nicht richtig interpretiert:

Deine Frage war ob es eine Möglichkeit gibt "aus einem DataGridView eine DataTable zu erstellen". Dies habe ich mit dem Post beantwortet. Die Lösung wäre eine neue DataTable zu erstellen und diese mit der entsprechenden Anzahl von Spalten (wie im DataGridView) auszustatten und danach zeilenweise die Zellen des DataGridView in die DataTable zu kopieren.

Was du nicht erwähnt hattest (und auch nach wie vor nicht wirklich schreibst), dass du offenbar eine Datenquelle benutzt; s. u. "weil einige spalten im Grid erst beim Füllen ermittelt ... ein paar funktionen hinter die nicht per SQL realiesiert sind". Du müsstest also schon genauer sagen wo die Daten her kommen, die in deinem Grid dargestellt werden.

Es reicht nicht einfach eine "blanke" DataTable als Datenquelle anzugeben. Dein Grid "weiß" in diesem Fall ja nicht, was es machen soll! Deshalb ist deine Vermutung richtig, dass die DataTable nur verwendet wird, wenn sie vorher mit Spalten ausgestattet war. Nur dann kann das Grid die DataTable bedienen (s. hier):

Dim table As DataTable = new DataTable("SomeData")  
Dim column As DataColumn 
Dim row As DataRow 
 
column = New DataColumn()
column.DataType = System.Type.GetType("System.String")  
column.ColumnName = "Name"  

table.Columns.Add(column)

dataGridView.DataSource = table

Wenn du deine DataTable wieder aus der DataSource "heraus holen" möchtest, musst du sie erst umwandeln (einfach table = ...DataSource klappt nicht). Zum Cast siehe z. B. hier:

Dim table as DataTable = DirectCast(dataGridView.DataSource, DataTable)

Ich bin kein VBler, wenn der Code also nicht wirklich korrekt ist wundere dich nicht, pass ihn einfach an.

Soweit so gut.

Wenn deine Daten in dem Grid an eine Exportfunktion übergeben werden sollen: Was erwartet denn deine Exportfunktion? Die einfachste Variante wäre eventuell, die bereits angesprochene DataGridViewRowCollection zu übergeben und auszuwerten. Oder, wie du bereits meintest das komplette Grid.

Grüße