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