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. |