| |
ADO.NET / DatenbankenDarstellung einer Boolean-Spalte im DGV vor/nach Speichern (XML) unterschiedlich | | | Autor: Schudi | Datum: 12.06.18 14:13 |
| Und gleich noch eine Folgefrage zur ReadXML-Problematik. Ich versuche das Problem mal zu erklären...
Ich lege zunächst eine Tabelle mit Testdaten per Code an:
Dim _DSKunden As New DataSet("Kundendaten")
Dim _DTKunden As New DataTable("Kunden")
With _DTKunden.Columns
.Add("KundeNr", Type.GetType("System.String"))
.Add("Kundename", Type.GetType("System.String"))
.Add("Kundelogin", Type.GetType("System.String"))
.Add("KundePw", Type.GetType("System.String"))
.Add("KundeGetBE", Type.GetType("System.Boolean"))
.Add("KundeSendBR", Type.GetType("System.Boolean"))
.Add("KundeSendOK", Type.GetType("System.Boolean"))
.Add("KundeSendPL", Type.GetType("System.Boolean"))
.Add("KundeSendPLF", Type.GetType("System.Boolean"))
.Add("KundeSendIndvPL", Type.GetType("System.Boolean"))
.Add("KundeSendIndvPLF", Type.GetType("System.Boolean"))
End With
_DSKunden.Tables.Add(_DTKunden)
Dim _myRow As DataRow
_myRow = _DTKunden.NewRow
_myRow("Kundenr") = "100"
_myRow("Kundename") = "Max Mustermann"
_myRow("Kundelogin") = "ABCDEFGH"
_myRow("KundePw") = "123456"
_myRow("KundeGetBE") = True
_myRow("KundeSendBR") = True
_myRow("KundeSendOK") = True
_myRow("KundeSendPL") = True
_myRow("KundeSendPLF") = True
_myRow("KundeSendIndvPL") = True
_myRow("KundeSendIndvPLF") = True
_DTKunden.Rows.Add(_myRow)
_DTKunden.AcceptChanges()
_DSKunden.AcceptChanges()
'Die Anzeige erfolgt in einem DataGridView
DgvKunden.DataSource = _DSKunden.Tables("Kunden")
DgvKunden.Refresh()
DgvKunden.Show() Soweit ist alles wunderbar und wie gewünscht. Die Boolean-Spalten werden automatisch als Checkbox im DGV angezeigt - entweder mit Häkchen drin (True) oder ohne Häkchen (False).
Jetzt werden die Datensätze in eine XML-Datei geschrieben...
Dim _KundenXMLStream As New System.IO.FileStream(_KundenPfad, _
System.IO.FileMode.Create)
Dim _KundenXMLWriter As New System.Xml.XmlTextWriter(_KundenXMLStream, _
System.Text.Encoding.Unicode)
_DSKunden.WriteXml(_KundenXMLWriter)
_KundenXMLWriter.Close() Die XML-Datei sieht dann wie folgt aus:
<?xml version="1.0"?>
-<Kundendaten>
-<Kunden>
<KundeNr>100</KundeNr>
<Kundename>Max Mustermann</Kundename>
<Kundelogin>ABCDEFGH</Kundelogin>
<KundePw>123456</KundePw>
<KundeGetBE>true</KundeGetBE>
<KundeSendBR>true</KundeSendBR>
<KundeSendOK>true</KundeSendOK>
<KundeSendPL>true</KundeSendPL>
<KundeSendPLF>true</KundeSendPLF>
<KundeSendIndvPL>true</KundeSendIndvPL>
<KundeSendIndvPLF>true</KundeSendIndvPLF>
</Kunden>
-<Kunden>
<KundeNr>200</KundeNr>
<Kundename>Nils Schuder</Kundename>
<Kundelogin>ZZZZZZ</Kundelogin>
<KundePw>99999</KundePw>
<KundeGetBE>false</KundeGetBE>
<KundeSendBR>false</KundeSendBR>
<KundeSendOK>false</KundeSendOK>
<KundeSendPL>true</KundeSendPL>
<KundeSendPLF>true</KundeSendPLF>
<KundeSendIndvPL>true</KundeSendIndvPL>
<KundeSendIndvPLF>true</KundeSendIndvPLF>
</Kunden>
</Kundendaten> Wenn ich die Daten jetzt wieder einlesen:
_DSKunden.ReadXml(_KundenPfad)
'Die Anzeige erfolgt in einem DataGridView
DgvKunden.DataSource = _DSKunden.Tables("Kunden")
DgvKunden.Refresh()
DgvKunden.Show() Die Boolean-Spalten werden jetzt automatisch als Text im DGV angezeigt - also das Wort "True" oder "False.
Ich vermute, dass beim Einlesen durch ReadXML der DataType der Spalten auf "String" festgelegt wird, statt auf Boolean.
Versuche ich diesen allerdings nachträglich zu ändern, kommt eine Meldung dass der Spaltentyp nicht mehr geändert werden darf nachdem die DatatTable Daten enthält.
Vor dem ReadXML kann ich den Datentyp aber auch nicht ändern, da die DataTable erst durch das ReadXML erzeugt wird.
Was muss ich machen, damit die Spalten auch nach dem Wiedereinlesen als CheckBox angezeigt werden?
Ich danke im Voraus für Eure Hilfe. | |
Re: Darstellung einer Boolean-Spalte im DGV vor/nach Speichern (XML) unterschiedlich | | | Autor: Manfred X | Datum: 12.06.18 14:57 |
| Gibt es einen Grund, weshalb Du nicht einfach das Datenschema speicherst?
Ohne Datenschema kann man Spaltentypen beim Lesen nicht erkennen. | |
Re: Darstellung einer Boolean-Spalte im DGV vor/nach Speichern (XML) unterschiedlich | | | Autor: Schudi | Datum: 12.06.18 15:05 |
| Vielen Dank für Deine Antwort.
Nein, gibt es nicht.
Ich bin nach dem Beispiel aus der MSDN aus meinem letzten Thread davon ausgegangen, dass das Schema automatisch beim WriteXML vom XMLWriter mit gespeichert wird. So stand es in dem verlinkten Beispiel...
Wie müsste ich das Speichern denn abändern, damit das Schema mit gespeichert wird? | |
gelöst: Darstellung einer Boolean-Spalte im DGV vor/nach Speichern (XML) unter.. | | | Autor: Schudi | Datum: 12.06.18 15:20 |
| Vielen Dank und zehn Mal "Sorry". Ich bin ein Blindfisch....
Dim _KundenXMLStream As New System.IO.FileStream(_KundenPfad, _
System.IO.FileMode.Create)
Dim _KundenXMLWriter As New System.Xml.XmlTextWriter(_KundenXMLStream, _
System.Text.Encoding.Unicode)
_DSKunden.WriteXml(_KundenXMLWriter, XmlWriteMode.WriteSchema)
_KundenXMLWriter.Close() Und schon ist die Sache "gegessen". Ist ja nicht so, als hättest Du mir das nicht heute Morgen schon gesagt... | |
| 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 |
|
|
Neu! sevCommand 4.0
Professionelle Schaltflächen im modernen Design!
Mit nur wenigen Mausklicks statten auch Sie Ihre Anwendungen ab sofort mit grafischen Schaltflächen im modernen Look & Feel aus (WinXP, Office, Vista oder auch Windows 8), inkl. große Symbolbibliothek. Weitere InfosTipp des Monats TOP Entwickler-Paket
TOP-Preis!!
Mit der Developer CD erhalten Sie insgesamt 24 Entwickler- komponenten und Windows-DLLs. Die Einzelkomponenten haben einen Gesamtwert von 1605.50 EUR...
Jetzt nur 599,00 EURWeitere Infos
|
|
|
Copyright ©2000-2024 vb@rchiv Dieter Otter Alle Rechte vorbehalten.
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.
Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel
|
|