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

Rispondi quotando