1. Este site usa cookies. Ao continuar a usar este site está a concordar com o nosso uso de cookies. Saber Mais.

VB.NET - Array de estrutura

Discussão em 'Programação' iniciada por Noeljunior, 13 de Novembro de 2007. (Respostas: 0; Visualizações: 2486)

  1. Noeljunior

    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 ;)

    [​IMG]

    Cumps
     

Partilhar esta Página