VB.NET - Array de estrutura

Noeljunior

I fold therefore I AM
Boas


Estou aqui encravado numa situação estranha.

Tenho uma estrutura e, mais tarde, um array do tipo da estrutura (array as nome_da_estrutura).
É um programa tipo base de dados. Muito rapidamente digo que é um programa que por cada disciplina (array) tem vários (8) campos a guardar (estrutura).

Então tenho 3 listviews onde mostro os dados de cada disciplina e uma combobox onde escolho a disciplina. O erro acontece quando mudo a disciplina e reparo que ele não está a guardar decentemente os dados.

Array-estrutura:
Public Structure uswdis
Public nome As String
Public testedata() As Date
Public testenota() As Single
Public faltadata() As Date
Public faltamot() As String
Public faltajust() As Boolean
Public sumdata() As Date
Public sumdes() As String
End Structure
Public disuw() As uswdis

listview1: testedata; testenota
listview2: faltadata; faltamot; faltajust
listview3: sumdata; sumdes


Código que adiciona os dados no array-estrutura:
Código:
    Public Sub adtest(ByVal x As Date, ByVal y As Single)
        disuw(disciplinas.SelectedIndex).testedata(disuw(disciplinas.SelectedIndex).testedata.Length - 1) = CDate(x)
        disuw(disciplinas.SelectedIndex).testenota(disuw(disciplinas.SelectedIndex).testenota.Length - 1) = y
        Dim lg As Integer = disuw(disciplinas.SelectedIndex).testedata.Length + 1
        Array.Resize(disuw(disciplinas.SelectedIndex).testedata, lg)
        Array.Resize(disuw(disciplinas.SelectedIndex).testenota, lg)

        Dim adf As ListViewItem
        adf = testetext.Items.Add(CStr(x), 0)
        adf.SubItems.Add(y)
    End Sub

    Public Sub adfal(ByVal x As Date, ByVal y As String, ByVal z As Boolean)
        disuw(disciplinas.SelectedIndex).faltadata(disuw(disciplinas.SelectedIndex).faltadata.Length - 1) = CDate(x)
        disuw(disciplinas.SelectedIndex).faltamot(disuw(disciplinas.SelectedIndex).faltamot.Length - 1) = y
        disuw(disciplinas.SelectedIndex).faltajust(disuw(disciplinas.SelectedIndex).faltajust.Length - 1) = CBool(z)
        Dim lg As Integer = disuw(disciplinas.SelectedIndex).testedata.Length + 1
        Array.Resize(disuw(disciplinas.SelectedIndex).faltadata, lg)
        Array.Resize(disuw(disciplinas.SelectedIndex).faltamot, lg)
        Array.Resize(disuw(disciplinas.SelectedIndex).faltajust, lg)

        Dim adf As ListViewItem
        adf = faltatext.Items.Add(CStr(x), 0)
        adf.SubItems.Add(y)
        If z = True Then
            adf.SubItems.Add("Sim")
        Else
            adf.SubItems.Add("Não")
        End If
    End Sub

    Public Sub adsum(ByVal x As String, ByVal y As String)
        disuw(disciplinas.SelectedIndex).sumdata(disuw(disciplinas.SelectedIndex).sumdata.Length - 1) = CDate(x)
        disuw(disciplinas.SelectedIndex).sumdes(disuw(disciplinas.SelectedIndex).sumdes.Length - 1) = y
        Dim lg As Integer = disuw(disciplinas.SelectedIndex).testedata.Length + 1
        Array.Resize(disuw(disciplinas.SelectedIndex).sumdata, lg)
        Array.Resize(disuw(disciplinas.SelectedIndex).sumdes, lg)

        Dim adf As ListViewItem
        adf = testetext.Items.Add(x, 0)
        adf.SubItems.Add(y)
    End Sub
No inicio do programa ele faz um resize a cada campo para 1. A variável lg serve-me de apoio para fazer um resize sempre que adiciono um teste, falta ou sumário aos campos.


O código que limpa as listviews e escreve nelas os dados de cada disciplina:
Código:
    Private Sub disciplinas_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles disciplinas.SelectedIndexChanged
        'Limpa
        testetext.Items.Clear()
        faltatext.Items.Clear()
        sumariotext.Items.Clear()

        'Listview testetext
        For x As Integer = 0 To disuw(disciplinas.SelectedIndex).testedata.Length - 2
            Dim adf As ListViewItem
            adf = testetext.Items.Add(CStr(disuw(disciplinas.SelectedIndex).testedata(x)), 0)
            adf.SubItems.Add(disuw(disciplinas.SelectedIndex).testenota(x))
        Next

        'Listview sumariotext
        For z As Integer = 0 To disuw(disciplinas.SelectedIndex).sumdata.Length - 2
            Dim adff As ListViewItem
            adff = sumariotext.Items.Add(CStr(disuw(disciplinas.SelectedIndex).sumdata(z)), 0)
            adff.SubItems.Add(disuw(disciplinas.SelectedIndex).sumdes(z))
        Next

        'Listview faltatext
        For y As Integer = 0 To disuw(disciplinas.SelectedIndex).faltadata.Length - 2
            Dim adfff As ListViewItem
            adfff = faltatext.Items.Add(CStr(disuw(disciplinas.SelectedIndex).faltadata(y)), 0)
            adfff.SubItems.Add(disuw(disciplinas.SelectedIndex).faltamot(y))
            If disuw(disciplinas.SelectedIndex).faltajust(y) = True Then
                adfff.SubItems.Add("Sim")
            Else
                adfff.SubItems.Add("Não")
            End If
        Next
    End Sub
E é tudo. Ele nao está a guardar bem os dados porque quando mudo de disciplina ele só escreve bem na listview dos testes. Na da faltas ele adiciona um a mais com 000 e nos sumários não faz nada.

Se desconfiarem de alguma coisa, digam, sff ;)

semttulosd6.jpg


Cumps
 
Back
Topo