Visualizzazione dei risultati da 1 a 4 su 4
  1. #1

    Aggiornare un datagridview con bindingsource

    Salve a tutti,
    sono alcuni giorni che stò cercando la soluzione ad un problema sicuramente molto semplice:

    ho creato una applicazione mdi, con VB2010, che utilizza un database xml.
    nell'interfaccia compaiono 2 finestre anche contemporaneamente, nella prima faccio tutte le operazioni di inserimento, modifica, cancellazione, etc... nella seconda utilizzo un datagridview (con bindingsource creato a manina da me) solo per mostrare i dati gestiti con l'altra finestra.
    e fin qui tutto ok.

    Il problema viene ora. Avendo entrambe le finestre aperte vorrei poter ricaricare i dati nella seconda finestra senza doverla richiudere e riaprire. Magari con il classico pulsante 'aggiorna'.
    E' possibile far ciò?

    Posto un poco di codice della finestra che mostra i dati.

    Grazie,

    codice:
            Dim tables As DataTableCollection = DataSet11.Tables
            Dim view1 As New DataView(tables(3))
    
            ' Create a DataGridView control and add it to the form.
            'Dim datagridview1 As New DataGridView()
            'datagridview1.AutoGenerateColumns = True
            'Me.Controls.Add(datagridview1)
    
            ' Create a BindingSource and set its DataSource property to
            ' the DataView.
            Dim source1 As New BindingSource()
            source1.DataSource = view1
    
            ' The Filter string can include Boolean expressions.
            'MsgBox("data_i >= '" & data_i.ToShortDateString.ToString & " 07:00' and data_f <= '" & data_f.ToShortDateString.ToString & " 20:00'")
            ' Modifica del filtro per riempire il planner. Procedura richiamata 4 volte per inserire tutti i pazienti, 
            ' compresi coloro che nella settimana corrente, o hanno iniziato prima o finiscono dopo.
            ' Attenzione: il valore di id_terapista è statico. vale solo 0 (doc) o 1 (mask).
            ' Primo richiamo...
            If dvgRef.Name = "dvgPlanner" Then
                source1.Filter = "(data_i >= '" & data_i.ToShortDateString.ToString & " 07:00' and data_f <= '" & _
                                 data_f.ToShortDateString.ToString & " 20:00' and id_terapista = 0)"
            Else
                source1.Filter = "(data_i >= '" & data_i.ToShortDateString.ToString & " 07:00' and data_f <= '" & _
                                 data_f.ToShortDateString.ToString & " 20:00' and id_terapista = 1)"
            End If
            ' Se abbiamo dati da mostrare, richiamo la funzione...
            If source1.Count > 0 Then
                RiempiTabPlannerDetails(source1, tables, view1, dvgRef, data_i, data_f)
            End If
    
    ' ------------------------------------------------------------------
        Private Sub RiempiTabPlannerDetails(ByRef source1 As BindingSource, ByRef tables As DataTableCollection, ByRef view1 As DataView, ByRef dvgRef As DataGridView, ByVal v_data_i As Date, ByVal v_data_f As Date)
            ' Impostiamo i pazienti nella griglia...
            Dim v_riga As Integer = 0
            Dim v_colonna As Integer = 0
    
            ' variabili per ottenere il cognome ed il nome della persona...
            Dim view2 As New DataView(tables(0)) ' Persona
            Dim source2 As New BindingSource()
            source2.DataSource = view2
    
            For i As Integer = 0 To source1.Count - 1
                'MsgBox(source1.Count & ": " & source1(i)("id_persona") & ", " & source1(i)("data_i") & ", " & source1(i)("data_f"))
                If (source1(i)("data_i") >= v_data_i And source1(i)("data_i") <= v_data_f) Then
                    v_data_i = source1(i)("data_i")
                Else
                    ' in questo caso prendo almeno l'orario finale...
                    Dim provvData As DateTime
                    provvData = New DateTime(v_data_i.Year, v_data_i.Month, v_data_i.Day, source1(i)("data_i").Hour, source1(i)("data_i").Minute, 0)
                    v_data_i = provvData
                End If
                If (source1(i)("data_f") <= v_data_f And source1(i)("data_f") >= v_data_i) Then
                    v_data_f = source1(i)("data_f")
                Else
                    ' in questo caso prendo almeno l'orario finale...
                    Dim provvData As DateTime
                    provvData = New DateTime(v_data_f.Year, v_data_f.Month, v_data_f.Day, source1(i)("data_f").Hour, source1(i)("data_f").Minute, 0)
                    v_data_f = provvData
                End If
    
                ' calcolo della riga...
                If v_data_i.DayOfWeek = 0 Then
                    v_colonna = 6
                Else
                    v_colonna = v_data_i.DayOfWeek - 1
                End If
                ' calcolo della colonna...
                v_riga = 4 * (v_data_i.Hour - 8)
                If v_data_i.Minute = 15 Then
                    v_riga += 1
                ElseIf v_data_i.Minute = 30 Then
                    v_riga += 2
                ElseIf v_data_i.Minute = 45 Then
                    v_riga += 3
                End If
                ' Filtro la tabella delle persone per ottenere il cognome ed il nome...
                source2.Filter = "id_persona = '" & source1(i)("id_persona").ToString & "'"
                ' mostro i dati nella griglia.
                ' occorre controllare quante caselle debbono contenere il cognome ed il nome
                ' per andarlo a scrivere...
                Dim n_righe, n_colonne As Integer
                ' variabili per il calcolo delle righe...
                Dim n_dt_i, n_dt_f As Integer
    
    
                n_colonne = 1 + DatePart(DateInterval.Day, v_data_f) - DatePart(DateInterval.Day, v_data_i)
                ' calcolo il numero di righe da scrivere, in base alla differenza delle ore...
                n_dt_i = f_calcolaRighe(v_data_i)
                n_dt_f = f_calcolaRighe(v_data_f)
                n_righe = (n_dt_f - n_dt_i) / 15

  2. #2

    [VB 2010]

    Salve,
    forse ho posto la domanda in maniera errata. Ciò che vorrei sapere è come posso in un form con un datagridview ed un bindingsource, aggiungere un pulsante 'aggiurna' e cosi ricaricare tutto, senza chiudere la finestra. Ho provato molti modi ma fino ad ora non ci sono riuscito.
    Grazie.

  3. #3

    Up

    Salve,
    cercando qualche consiglio all'interno del forum ho trovato 2 link che sembrano suggerire gli stessi provvedimenti da me adottati e che poi sono la logica conseguenza di ciò che si dovrebbe fare.
    I link sono i seguenti:
    http://forum.html.it/forum/showthrea...ggere+database

    http://forum.html.it/forum/showthrea...ggere+database

    Da entrambi si capisce che l'unica cosa da fare è rifare le stesse procedure adottate in fase di caricamento del form.
    E veniamo al punto: richiamo proprio le stesse funzioni richiamate nell'evento LOAD, ma le variabili utilizzate (un binidingsource, un DataTableCollection e un DataView) non sono aggiornate.

    Qualcuno sa come mai? O cosa fare per aggiornarle? Devo forse distruggerle prima?
    Grazie,

  4. #4

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.