| |
VB.NET - Ein- und UmsteigerRe: DataGridView | | | Autor: stefanbla80 | Datum: 11.10.13 21:20 |
| Hallo nochmals,
Mit dem,genannten Code kann ich nun den Inhalt meiner DataGridView speichern und wieder laden.
Angenommen ich habe auf einem TabPage weitere DataGridView - wie kann ich diese in der selben XML-Datei speichern. Der Inhalt ist natürlich dann unterschiedlich.
Grüße Stefan | |
DataGridView | | | Autor: stefanbla80 | Datum: 11.10.13 14:03 |
| Hallo zusammen,
auf meinem Form befindet sich ein DatGridView.
Diese befülle bzw. speichere ich mit diesem Code.
Weiter füge ich automatisch Comboboxen per Code ein.
Meine Frage: Wie kann ich den Inhalt der ComboBoxen in der xml speichern?!
Public Class Form1
Private ds As New DataSet
Private dt As New DataTable("MeineLinks")
Private Sub Form1_FormClosing(ByVal sender As Object, ByVal e As _
System.Windows.Forms.FormClosingEventArgs) Handles Me.FormClosing
ds.WriteXml("U:\MeineLinks.xml")
End Sub
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As _
System.EventArgs) Handles MyBase.Load
Dim column As New DataGridViewComboBoxColumn()
With column
.HeaderText = "Fuktion/Status"
.Items.AddRange("Kundeninfo", "E-Mail Angebot", "Mrs.", "Dr.")
.Width = 250
End With
Me.DataGridView1.Columns.Add(column)
dt.Columns.Add("Customer", System.Type.GetType("System.String"))
dt.Columns.Add("Customer", System.Type.GetType("System.String"))
dt.Columns.Add("Customer number", System.Type.GetType("System.String"))
dt.Columns.Add("Project", System.Type.GetType("System.String"))
dt.Columns.Add("Inquiry", System.Type.GetType("System.String"))
dt.Columns.Add("Quotation", System.Type.GetType("System.String"))
ds.Tables.Add(dt)
If My.Computer.FileSystem.FileExists("U:\MeineLinks.xml") Then
ds.ReadXml("U:\MeineLinks.xml")
End If
Me.DataGridView1.DataSource = ds.Tables("MeineLinks")
End Sub
End Class Grüße
Stefan
| |
Re: DataGridView | | | Autor: powerzone3000 | Datum: 11.10.13 15:46 |
| Hallo,
indem du die Spalte in deine Datenquelle (DataTable) aufnimmst, und die ComboBoxColumn daran bindest.
Eine mögliche Lösung könnte so aussehen:
Public Class Form1
Private ds As New DataSet
Private dt As New DataTable("MeineLinks")
Private Sub Form1_FormClosing(ByVal sender As Object, ByVal e As _
System.Windows.Forms.FormClosingEventArgs) Handles Me.FormClosing
ds.WriteXml("U:\MeineLinks.xml")
End Sub
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As _
System.EventArgs) Handles MyBase.Load
Dim column As New DataGridViewComboBoxColumn()
With column
.HeaderText = "Fuktion/Status"
.Width = 250
.Items.AddRange("Kundeninfo", "E-Mail Angebot", "Mrs.", "Dr.")
.DataPropertyName = "Status"
End With
Me.DataGridView1.Columns.Add(column)
dt.Columns.Add("Status", System.Type.GetType("System.String"))
dt.Columns.Add("Customer", System.Type.GetType("System.String"))
dt.Columns.Add("Customer number", System.Type.GetType("System.String"))
dt.Columns.Add("Project", System.Type.GetType("System.String"))
dt.Columns.Add("Inquiry", System.Type.GetType("System.String"))
dt.Columns.Add("Quotation", System.Type.GetType("System.String"))
ds.Tables.Add(dt)
If My.Computer.FileSystem.FileExists("U:\MeineLinks.xml") Then
ds.ReadXml("U:\MeineLinks.xml")
End If
Me.DataGridView1.DataSource = ds.Tables("MeineLinks")
End Sub
End Class Die sauberere Lösung wäre wohl, eine DataTable mit den Werten für die ComboBox aufzubauen und die Spalte daran zu binden.
Gruß | |
Re: DataGridView | | | Autor: Manfred X | Datum: 11.10.13 15:58 |
|
ds.WriteXml("U:\MeineLinks.xml", XmlWriteMode.WriteSchema) | |
Re: DataGridView | | | Autor: stefanbla80 | Datum: 11.10.13 16:12 |
| Hallo zusammen,
vielen Danke für Eure Hilfe.
Komme erstmal wieder zurecht. Ich finde die Lösung super!!
Grüße
Stefan | |
Re: DataGridView | | | Autor: Manfred X | Datum: 12.10.13 00:34 |
| Füge die an die Controls gebundenen DataTables
der Tables-Auflistung EINES Dataset hinzu und
nutze die Write-/ReadXML-Methode des Dataset.
| |
Re: DataGridView | | | Autor: stefanbla80 | Datum: 12.10.13 13:40 |
| Hallo Manfred,
hast Du mir hier bitte dazu ein Beispiel?
Das ist Neuland für mich.
Grüße Stefan | |
Re: DataGridView | | | Autor: Manfred X | Datum: 12.10.13 14:10 |
| Genau das was Du mit einer Table bereits gemacht hast,
ds.Tables.Add(dt) wiederholst Du für die Tables, die an die anderen Controls
gebunden sind - auf unterschiedliche TableNames achten!
ds.Tables.Add(dt1)
ds.Tables.Add(dt2)
'..... Danach, wie gehabt:
ds.WriteXml("U:\MeineLinks.xml", XmlWriteMode.WriteSchema) Nach dem Lesen per readXML stehen alle diese Tables in der Tables-Auflistung
des geladenen Dataset.
| |
Re: DataGridView | | | Autor: stefanbla80 | Datum: 14.10.13 07:06 |
| Hallo Manfred,
sorry für meine späte Rückmeldung erst jetzt ...
Habs eben versucht, funktioniert wunderbar.
Gleich nochmal eine Frage: Zeile hinzufügen
Mit dem Button möchte ich an das Ende des DataGridview eine weitere Zeile einfügen.
Deren Inhalt soll aus einer Textbox kommen.
Zum Testen habe ich hier diesen Code verwendet. Jedoch bekommen ich es nicht hin die "neuen Einträge" dem DS zu übergeben. Hier habe ich noch etwas Verständnisprobleme.
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As _
System.EventArgs) Handles Button1.Click
Dim RowCount As Integer = DataGridView1.RowCount - 1
DataGridView1.Rows(RowCount).Cells(1).Value = "NEIN"
Me.DataGridView1.DataSource = ds.Tables("MeineLinks")
End Sub Rein geschrieben bekommen ich es, jedoch nicht übernommen bzw. gespeichert.
Grüße
Stefan
| |
Re: DataGridView | | | Autor: Manfred X | Datum: 14.10.13 11:14 |
| Hallo!
Bei Datenbindung werden neue Zeilen in der Datasource
erstellt, nicht im Control.
Einfaches Beispiel ....
Public Class frmtest
Dim xmlfile As String = "U:\meinelinks.xml"
'statt Designer werden Controls hier per Code erstellt
Dim dg As New DataGridView With {.Parent = Me, .Top = 50}
Dim WithEvents btnAddNew As New Button With _
{.Parent = Me, .Text = "Add New Row"}
Dim ds As New DataSet
Private Sub frmtest_Load(sender As System.Object, _
e As System.EventArgs) Handles MyBase.Load
'z.B. neue Zeile nur per Button erlauben,
'nicht direkt im Grid
dg.AllowUserToAddRows = False
'Daten in das Dataset laden
ds.ReadXml(xmlfile)
'Tabelle ans Grid binden
dg.DataSource = ds.Tables(0)
End Sub
Private Sub btnAddNew_Click(sender As Object, _
e As System.EventArgs) Handles btnAddNew.Click
'Neue Zeile erstellen
Dim r As DataRow = ds.Tables(0).NewRow
'neue zeile ggf. per Code mit Werten füllen
' ....... z.B. aus Textboxen
'neue Zeile an die Tabelle anhängen
ds.Tables(0).Rows.Add(r)
End Sub
End Class Die neue Zeile wird nach Betätigung des AddNew-Buttons im Click-Eventhandler
in die Table eingetragen und danach automatisch im Grid angezeigt.
Vermutlich wäre aber die bessere Alternative, Textboxen direkt an Daten-Spalten
zu binden.
Beitrag wurde zuletzt am 14.10.13 um 11:22:35 editiert. | |
Re: DataGridView | | | Autor: stefanbla80 | Datum: 14.10.13 11:40 |
| Hallo Manfred,
danke für das Beispiel - ist absolutes Neuland für mich.
Aber birgt gute Möglichkeiten ...
Wie kann ich eine neue Zeile einfügen und den Inhalt von Textboxen verwenden.
Bitte ein Beipsiel, dann kann ich weiter machen denke ich ...
Grüße
Stefan | |
Re: DataGridView | | | Autor: Manfred X | Datum: 14.10.13 11:55 |
| Angenommen, du besitzt für die Eingabe des neuen Wertes
in Spalte "Customer" eine TextBox namens "txtCustomer":
'neue zeile ggf. per Code mit Werten füllen
r("Customer") = txtCustomer.Text
'usw ... die Spalten der neuen Zeile "r" können per Spaltenname
'oder Spaltenindex angesprochen werden. Schau Dir aber auch mal die DataBindings-Eigenschaft der
TextBox an, z.b. Bindung der Textbox an eine Table-Spalte
(index 0, hier könnte auch der Spaltenname "Customer" stehen,
bzw. der Name der Tabelle).
txtCustomer.DataBindings.Add _
("Text", ds.Tables(0), ds.Tables(0).Columns(0).ColumnName) Navigation durch Zeilen erfolgt z.B. über das DatagridView.
Beitrag wurde zuletzt am 14.10.13 um 11:59:39 editiert. | |
Re: DataGridView | | | Autor: stefanbla80 | Datum: 14.10.13 13:17 |
| Hallo Manfred,
super - diese Info reicht mir.
Zumindest für heute mal!!
Hast mich weiter gebracht, vielen Danke
Grüße
Stefan | |
| Sie sind nicht angemeldet! Um auf diesen Beitrag zu antworten oder neue Beiträge schreiben zu können, müssen Sie sich zunächst anmelden.
Einloggen | Neu registrieren |
|
|
sevWizard für VB5/6
Professionelle Assistenten im Handumdrehen
Erstellen Sie eigene Assistenten (Wizards) im Look & Feel von Windows 2000/XP - mit allem Komfort und zwar in Windeseile :-) Weitere InfosTipp des Monats Access-Tools Vol.1
Über 400 MByte Inhalt
Mehr als 250 Access-Beispiele, 25 Add-Ins und ActiveX-Komponenten, 16 VB-Projekt inkl. Source, mehr als 320 Tipps & Tricks für Access und VB
Nur 24,95 EURWeitere Infos
|