[VB.NET/FW2.0] XML naar dataset

Pagina: 1
Acties:

  • -SaveMe-
  • Registratie: Januari 2002
  • Laatst online: 16-02 10:34
Ik ben bezig met een projectje in Visual Studio 2005, VB.NET, framework 2.0.

Ik heb een dataset waarvan de gegevens door een sub als xml worden weggeschreven. Dat werkt prima. Met een andere sub laad ik de xml weer naar de dataset. Ook dat werkt.
Maar als ik de rijen uit een van de tabellen wil uitlezen en wil toewijzen aan een array, krijg ik een
foutmelding.

De dataset bevat twee tables:
1) Settings, altijd 1 row met 2 columns; SubDirs (boolean), SaveDirs(boolean)
2) Dirs, kan meerdere rijen van altijd 1 column bevatten; Dirname (string)

Het gaat fout op de tweede tabel.

Visual Basic .NET:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
    Sub LoadSettings()
        Dim strFileName As String = My.Application.Info.Title & "Init.xml"

        'Check if settingsfile exists
        If System.IO.File.Exists(My.Application.Info.DirectoryPath & "\" & strFileName) Then
            frmMain.dsProgramSettings.ReadXml(My.Application.Info.DirectoryPath & "\" & strFileName)
        Else
            UpdateStatus("Settings File not found!", Color.Yellow)
            Exit Sub
        End If

        'Update settings table in dataset
        SubDirs = frmMain.dsProgramSettings.Tables("Settings").Rows(0).Item("SubDirs")
        SaveDirs = frmMain.dsProgramSettings.Tables("Settings").Rows(0).Item("SubDirs")

        'Populate Dirs table with rows And update listbox on settings tab
        'Dim rowDirs As DataRow = frmMain.dsProgramSettings.Tables("Dirs")..Rows()
        Dim arrDirs As Array = frmMain.dsProgramSettings.Tables("dirs").Select
        Dim dir As Short

        For dir = 0 To UBound(arrDirs)
            SelectedDirectories(dir) = arrDirs(dir).ToString
            frmMain.lstDirs.Items.Add(frmMain.dsProgramSettings.Tables("Dirs").Rows.Item(dir).ToString)
        Next

    End Sub


Het gaat fout in de laatste loop waar ik een Public Array (SelectedDirectories as String) wil vullen
met de rijen (1 column) van de Table "Dirs" uit de Dataset "dsProgramSettings"

ik krijg de foutmelding "Object reference not set to an instance of an object."
in de IDE zie ik tijdens het Debuggen dat arrDirs is gevuld met het correcte aantal items, alleen zijn deze van het type {System.Data.Datarow}. Ik kan ook zien dat elke row weer een itemarray heeft die gevuld is met hetgeen ik wil hebben. Alleen ik krijg het niet voor elkaar.

Iemand enig idee ?

GamiQ, de game notes app met game maps!


  • joopst
  • Registratie: Maart 2005
  • Laatst online: 01-10-2024
de SelectedDirectories is (in de code op het scherm iig) niet geinstantieerd.

  • -SaveMe-
  • Registratie: Januari 2002
  • Laatst online: 16-02 10:34
joopst schreef op woensdag 22 maart 2006 @ 08:37:
de SelectedDirectories is (in de code op het scherm iig) niet geinstantieerd.
ja, sorry klopt. Maar dat is die wel. De sub LoadSettings staat nl in de module main en
bovenaan de module doe ik de declareer ik een aantal public vars:

Visual Basic .NET:
1
2
3
4
5
6
7
8
    'Declare Public variables
    Public txtCurrentFolder As String
    Public SelectedDirectories() As String
    Public NumberOfDirs As Short
    Public SubDirs As Boolean
    Public SaveDirs As Boolean
    Public MovieExtensions() As String = {".mpg", ".avi", ".mov", ".wmv", ".iso", ".bin", ".nrg", ".mp4", ".img", ".bup"}
    Public SubExtensions() As String = {".srt", ".sub"}


Voor het saven van de settings gebruik ik de volgende code

Visual Basic .NET:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
    Sub SaveSettings()
        'Purpose: Save settings to XML

        Dim strFileName As String = My.Application.Info.Title & "Init.xml"

        'delete the file if it exists
        If System.IO.File.Exists(My.Application.Info.DirectoryPath & "\" & strFileName) Then
            'frmMain.dsProgramSettings.ReadXml(My.Application.Info.DirectoryPath & "\" & strFileName)
            System.IO.File.Delete(My.Application.Info.DirectoryPath & "\" & strFileName)
        End If

        'Create Dataset Row for Settings and assign values
        Dim rowSettings As DataRow = frmMain.dsProgramSettings.Tables("Settings").NewRow

        'Clear settings table (should always have just one row
        frmMain.dsProgramSettings.Tables("Settings").Clear()

        rowSettings("subDirs") = frmMain.chkSubDirs.CheckState
        rowSettings("SaveDirs") = frmMain.chkSave.CheckState

        ' Add the record to the settings table
        frmMain.dsProgramSettings.Tables("settings").Rows.Add(rowSettings)

        'Create dataset Row for Directories to be saved
        If SaveDirs And Not SelectedDirectories Is Nothing Then
            Dim Dir As Short

            For Dir = 0 To UBound(SelectedDirectories)
                Dim rowDirs As DataRow = frmMain.dsProgramSettings.Tables("Dirs").NewRow
                rowDirs("Dirname") = SelectedDirectories(Dir).ToString
                frmMain.dsProgramSettings.Tables("Dirs").Rows.Add(rowDirs)
            Next Dir

        End If

        '' Update the XML file
        frmMain.dsProgramSettings.WriteXml(strFileName)

    End Sub


Ik had eerst ook problemen met het schrijven van de rijen uit de "Dirs" tabel. Oplossing
bleek om de datarow binnen de loop (ipv er net voor) te declareren

Visual Basic .NET:
1
Dim rowDirs As DataRow = frmMain.dsProgramSettings.Tables("Dirs").NewRow


Mijn vermoeden is dat het in dezelfde hoek zit. Allen ik kom er niet echt uit .... :/

EDIT:
Hmmm, bedenk me net dat in een andere sub, waar de door de user geselecteerde directories
in de array SelectedDirectories worden gestopt, ik de Array REdim voor het aantal items.
Straks eens proberen!

[ Voor 21% gewijzigd door -SaveMe- op 22-03-2006 15:51 ]

GamiQ, de game notes app met game maps!


  • -SaveMe-
  • Registratie: Januari 2002
  • Laatst online: 16-02 10:34
joopst, je hebt me op het goede spoor gezet.
De array SelectedDirectories was welliswaar gedeclared, maar moet wel opnieuw gedeclared worden
nav het aantal items dat ik erin wil stoppen!

Heb de rest ook van de sub ook herschreven:

Visual Basic .NET:
1
2
3
4
5
6
7
8
9
        'Populate Dirs table with rows And update listbox on settings tab
        Dim tblDirs As DataTable = frmMain.dsProgramSettings.Tables.Item("Dirs")
        ReDim Preserve SelectedDirectories(tblDirs.Rows.Count - 1)
        Dim dir As Short

        For dir = 0 To UBound(SelectedDirectories)
            SelectedDirectories(dir) = tblDirs.Rows(dir).Item("DirName").ToString
            frmMain.lstDirs.Items.Add(SelectedDirectories(dir))
        Next


Bedankt!

[ Voor 3% gewijzigd door -SaveMe- op 22-03-2006 19:42 ]

GamiQ, de game notes app met game maps!