| 

.NET C# Java Javascript Exception

1
Ich möchte ein 2D-Array (Typ Char) an ein DataGridView binden (soll im Prinzip wie eine Art Excel-Tabelle aussehen). Warum ein Array? Weil ich die Änderung im DataGridView direkt in ein Array übernehmen und beim Betätigen eines Buttons das 2D Array in eine Datei speichern möchte. Mittels

Dim x(10,10) As Char
DataGridView.DataSource = x

komme ich jedenfalls nicht wirklich weiter (die Dimensionen sind nur ein Beispiel). Der Bereich des Views bleibt einfach nur grau.
Muss ich bei dem Problem eine DataTable machen und diese an das DataGridView binden? Also quasi in der Art

Dim dt as DataTable
DataGridView.DataSource = dt

und das Array erst in die Tabelle zu überführen? Ich suche natürlich eine möglichst einfache Lösung.

Danke!
News:
26.07.2011
muffi 1,4k 1 9
Ich poste Dir morgen Quellcode, ich habe dafür eine Funktion irgendwo in den weiten des Webs gefunden, und binde selbst ein eigenes Excel-Like-Grid daran.
Jens Duczmal 26.07.2011
6 Antworten
0
Hallo,

als Datasource kannst Du nur Objekte verwenden die ein bestimmtes Interface implementieren. Dazu hier die Erklärung.

Mit eine DataTable würde es demzufolge funktionieren.
26.07.2011
SensenMannLE 1,2k 2 9
0
Hallo,

eine DataTable ist da wohl besser geeignet da du damit flexibler bist.
Wie das Binding an den DataGridView funktioniert findest du hier: Gewusst wie: Binden von Daten an das DataGridView-Steuerelement in Windows Forms

Die DataTable kannst du dann auch ganz einfach in eine Datei schreiben.
Dafür musst du nur die einzelnen Zeilen und Zellen durchgehen (wie beim Array).

Gruß
Michael
26.07.2011
michlG 1,7k 1 5
0
Nachdem ich ein bischen herumgespielt habe, aber nicht wirklich weiter komme... im Prinzip muss ich mir doch das DataSet zusammenbasteln. Also:

Dim ds As New DataSet
ds.Tables.Add("Tabelle1")
For x=0 to 10
ds.Tables("Tabelle1").NewRow()
ds.Tables("Tabelle1").Rows(x).Item(y) = 0
Next x
DataGridView1.DataSource = ds.Tables("t1")

Da ich langsam überhaupt nichts mehr blicke vor lauter Bücher, Hilfen und Google:
1. Wie sage ich dem VB, wie viele Spalten es anlegen soll?
2. In der For-Schleife steigt er mir im Moment (natürlich?) in der Zeile mit dem "= 0" aus mit der Meldung, an Position 0 befände sich keine Zeile... ich vermute mal, ein Folgeeffekt, weil ich nicht definiert habe, wie viele Spalten in der Zeile sind?

Vielen Dank für Eure Hilfe!
26.07.2011
muffi 1,4k 1 9
0
Du hast noch gar keine Spalten in der DataTable definiert.
Sieh dir das Beispiel hier an:
VB.NET DataTable Example
26.07.2011
Martin Fuchs 1,4k 9
Deshalb habe ich das Ganze jetzt komplett umgestrickt: Ich habe das DataGridView, bei dem ich im Code die Anzahl der Spalten, Überschrift und Anzahl der Zeilen definiere. Dann schreibe ich das 2D-Array direkt in das DataGridView. Beim Klicken auf "Speichern" lese ich das DataGridView halt wieder aus. Mag zwar ziemlich umständlich sein, aber funktioniert.
muffi 26.07.2011
0
Wenn ich das richtig verstehe, denn willst du im prinzip nen datagridview haben, was du auf knopfdruck in einer datei speichen kannst und vlt auch wieder laden... ja?

denn hilft dir vlt mein kleiner skript, mit dem das eig ganz simpel ist...
Dim MyDataTable As New DataTable
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
MyDataTable.Columns.Clear()
MyDataTable.Rows.Clear()
For Each column As DataGridViewTextBoxColumn In DataGridView1.Columns
MyDataTable.Columns.Add(column.Name)
For Each row As DataGridViewRow In DataGridView1.Rows
Dim MyNewRow As DataRow
MyNewRow = MyDataTable.NewRow()
MyNewRow.Item(column.Index) = row.Cells(column.Index).Value
MyDataTable.Rows.Add(MyNewRow)
Next
Next

MyDataTable.WriteXml("C:\Test.xml")
End Sub


auf knopfdruck wird der inhalt vom datagridview in eine datatable geschrieben und daraufhin in eine xml datei geschrieben ;)
das laden/schreiben in die datei ist jeweils nur eine zeile
26.07.2011
DerPunk 1,2k 1 7
Wow!
Jo, Du hast es vollkommen erfasst! Nur, dass ich eine txt-Datei lese/schreibe (das schaffe ich gerade noch umzusetzen ;-) ). Das werde ich auf jeden Fall testen. Auf den ersten Blick genau das, was ich brauche. Werde ich morgen mal testen, aber das riecht ziemlich nach dem grünen Haken!
muffi 26.07.2011
muss es denn ne txt datei sein? denn mit dataset und datatable bietet sich xml gut an, da man das mit nem einfachen commando speichern und laden kann...
DerPunk 26.07.2011
Ja, es muss leider eine txt sein, da es hier um eine Schnittstelle geht. Da muss ich mich leider an das Vorgegebene halten.
muffi 27.07.2011
0
Folgender Code transformiert ein String Array mit 3 "spalten" und 6 "zeilen" in ein DataView, das Du dann für DataBinding nehmen kannst.

_myDataView = BindingHelper.GetBindable2DArray(Of String)(Data, 3, 6)


Friend NotInheritable Class BindingHelper
Private Sub New()
End Sub
Public Shared Function GetBindable2DArray(Of T)(ByVal array As T(,), ByVal cols As Integer, ByVal rows As Integer) As DataView
Dim dataTable As New System.Data.DataTable()
For i As Integer = 0 To cols - 1
dataTable.Columns.Add(i.ToString(), GetType(Ref(Of T)))
Next


Dim dataView As New DataView(dataTable)

For i As Integer = 0 To rows - 1
Dim dataRowView As DataRowView = dataView.AddNew()
For j As Integer = 0 To cols - 1
Dim a As Integer = i
Dim b As Integer = j
Dim refT As New Ref(Of T)(Function() array(a, b), Function(z)
array(a, b) = z
End Function)
dataRowView(j.ToString()) = refT
Next
dataRowView.EndEdit()
Next
Return dataView
End Function
End Class
27.07.2011
Jens Duczmal 2,6k 1 3 9
Das klingt auch recht gut. Für welches VB ist der Code? 2005 stört sich an der Dim refT-Zeile (da hat er sogar so viel zu maulen, dass er sogar vergisst, dass zu den beiden For die beiden Next vorhanden sind ;-) ). Ich hätte das gern selbst gelöst... vermutlich ist der Dreh- und Angelpunkt das Function().
muffi 27.07.2011
VS 2010 benutzen wir hier. Eine C#-Version hätte ich sonst auch, falls Du das irgendwie unterbringen kannst.
Konnte VB 2005 noch keine anonymen Methoden? Sonst müsstest Du das in ein Delegate und eine Funktion auslagern.
Jens Duczmal 27.07.2011

Stelle deine .net-Frage jetzt!
TOP TECHNOLOGIES CONSULTING GmbH