Dim x(10,10) As Char
DataGridView.DataSource = x
Dim dt as DataTable
DataGridView.DataSource = dt
News:
|
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
|
|
|
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")
|
|
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
|
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
|
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
|
_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
|
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
|