vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
TOP-Angebot: 17 bzw. 24 Entwickler-Vollversionen zum unschlagbaren Preis!  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2024
 
zurück

 Sie sind aktuell nicht angemeldet.Funktionen: Einloggen  |  Neu registrieren  |  Suchen

ADO.NET / Datenbanken
Darstellung 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.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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?
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Darstellung einer Boolean-Spalte im DGV vor/nach Speichern (XML) unterschiedlich 
Autor: Manfred X
Datum: 12.06.18 15:07

https://www.vbarchiv.net/forum/id24_i20446t20445_datasetxmlwriter-erzeugte-xml-enthaelt-nur-den-datasetnamen.html
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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...
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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

Funktionen:  Zum Thema  |  GesamtübersichtSuchen 

nach obenzurück
 
   

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