Form con datagridview che va alla prima ma non alla seconda chiamata

di il
10 risposte

Form con datagridview che va alla prima ma non alla seconda chiamata

Salve, ho un form con una datagridview che popolo da una tabella.

seleziono il form dal menu la prima volta e tutto funziona, vedo tutte le righe

esco dal form

lo richiamo e vedo una sol riga del datagridview,

indici azzerati, databinding etc

avete qualche  idea , grazie

10 Risposte

  • Re: Form con datagridview che va alla prima ma non alla seconda chiamata

    Senza codice che idee vuoi?

  • Re: Form con datagridview che va alla prima ma non alla seconda chiamata

    Questa funzione è un planner che funziona alla prima chiamata, va avanti , indietro, tutto ok

    ma se chiudo il form e lo riapro appare i datagrid on una sola riga, una volta risolto il problema potete usarlo se vi va

    questo è il codice

    Imports System.Web.UI.WebControls
    Imports System.Windows.Forms.VisualStyles.VisualStyleElement

    Public Class frmPlanimpa
       Private Sub frmPlanimpa_Load(sender As Object, e As EventArgs) Handles MyBase.Load
           DGV2.ColumnCount = 11
           DGV2.RowCount = 26
           DGV2.Columns(0).Frozen = True
           como_data_old = Today
           como_giorno = Mid$(como_data_old, 1, 2)
           como_mese = Mid$(como_data_old, 4, 2)
           como_anno = Year(como_data_old)
           TextBox3.Text = Today
           TextBox2.Text = Today.AddDays(+30)
           DGV2.Columns(0).Frozen = True
           Call agenda1()
           Call verifica_impegni1()
       End Sub

       Private Sub agenda1()


           Dim ind_riga As Integer
           Dim ind_col As Integer

           ind_riga = 0
           ind_col = 0

           Me.DGV2.ColumnCount = 11
           Me.DGV2.RowCount = 26
           Me.DGV2.Refresh()
           For y = 1 To 25
               DGV2.Rows(y - 1).Height = 25
           Next

    gira_colonna:
           ind_col = ind_col + 1
           '        DGV2.Col = ind_col
           DGV2.Font = New Font("ms sans serif", 7, FontStyle.Bold)
           DGV2.Columns(ind_col).Width = 100
           DGV2.Columns(ind_col).DefaultCellStyle.BackColor = Color.AliceBlue
           DGV2.Columns(ind_col).DefaultCellStyle.ForeColor = Color.DarkRed
           DGV2.Columns(ind_col).HeaderText = como_giorno + "/" + como_mese + "/" + como_anno
           'Testo il mese per impostare il prossimo
           If CDec(como_mese) = 4 Or CDec(como_mese) = 6 Or CDec(como_mese) = 9 Or CDec(como_mese) = 11 Then
               If CDec(como_giorno) = 30 Then
                   como_giorno = "0"
                   como_mese = CDec(como_mese) + 1
               End If
           End If
           If CDec(como_mese) = 1 Or CDec(como_mese) = 3 Or CDec(como_mese) = 5 Or CDec(como_mese) = 7 Or CDec(como_mese) = 8 Or CDec(como_mese) = 10 Then
               If CDec(como_giorno) = 31 Then
                   como_giorno = "0"
                   como_mese = CDec(como_mese) + 1
               End If
           End If
           If CDec(como_mese) = 2 Then
               If CDec(como_giorno) = 28 Or CDec(como_giorno) = 29 Then
                   como_giorno = "0"
                   como_mese = CDec(como_mese) + 1
               End If
           End If
           If CDec(como_mese) = 12 Then
               If CDec(como_giorno) = 31 Then
                   como_giorno = "0"
                   como_mese = "01"
                   como_anno = CDec(como_anno) + 1
               End If
           End If

           If CDec(como_mese) < 10 Then
               mese_como = CDec(como_mese)
               como_mese = "00"
               Mid$(como_mese, 2, 1) = mese_como
           End If

           If CDec(como_giorno) > 8 Then
               como_giorno = CDec(como_giorno) + 1
           Else
               giorno_como = como_giorno
               como_giorno = "00"
               Mid$(como_giorno, 2, 1) = CDec(giorno_como) + 1
           End If


           If ind_col < 10 Then
               GoTo gira_colonna
           End If
       End Sub

       Private Sub verifica_impegni1()

           Dim datada As String
           Dim dataa As String

           DGV2.ColumnCount = 11
           DGV2.RowCount = 26
           ind_riga = 0
           ind_col = 1
           i = 0
           y = 0

           datada = TextBox3.Text.Trim
           giorno = Mid$(datada, 1, 2)
           mesone = Mid$(datada, 4, 2)
           anno = Mid$(datada, 7, 4)
           datada = CStr(anno) + "/" + mesone + "/" + CStr(giorno)

           ind_col = 10

           dataa = TextBox2.Text.Trim
           giorno = Mid$(dataa, 1, 2)
           mesone = Mid$(dataa, 4, 2)
           anno = Mid$(dataa, 7, 4)
           dataa = CStr(anno) + "/" + mesone + "/" + CStr(giorno)
    leggi_impegno:
           Dim mtable As New DataTable
           mtable.Clear()
           mtable = MyDBaseM.Table("select odl.id_livello, odl.id_impianto, anag.descrizione, odl.data_lavoro, sum(tec.tempo) as tempo, tec.descrizione from (tecnici_odl as tec left join ordini_lavoro as odl  on (odl.id_ordine_lavoro = tec.id_ordine_lavoro) ) left join macchinari as anag on (odl.id_livello = anag.id_livello and odl.id_impianto = anag.id_impianto) where odl.data_lavoro >= #" & datada & "# AND odl.data_lavoro <= #" & dataa & "#  group by odl.id_livello, odl.id_impianto, anag.descrizione, tec.descrizione, odl.data_lavoro order by odl.id_livello, odl.id_impianto, anag.descrizione, odl.data_lavoro")
           If mtable.Rows.Count < 1 Then
               MessageBox.Show("Attenzione! non sono presenti impegni per questo periodo")
               Exit Sub
           End If
           ind_riga = 0
           ind_col = 0
           Dim r As DataRow
           r = mtable.Rows(mtable.Rows.Count - 1)
           TextBox1.Text = mtable.Rows.Count

           For Each r In mtable.Rows
    gira_data:
               ind_col = ind_col + 1
               If ind_col > 10 Then
                   GoTo fine_impegno
               End If
               dataa = r("data_lavoro").ToString.Trim
               giorno = Mid$(dataa, 1, 2)
               mesone = Mid$(dataa, 4, 2)
               anno = Mid$(dataa, 7, 4)
               dataa = CStr(giorno) + "/" + mesone + "/" + CStr(anno)

               If DGV2.Columns(ind_col).HeaderText <> dataa Then
                   GoTo gira_data
               End If
    IMPEGNA:
               como_Col = ind_col
               Dim i As Integer
               DGV2.Rows(i).Height = 25
               DGV2.Rows(0).Selected = True
    gira_ora:
               ind_riga = ind_riga + 1
               i = ind_riga
               DGV2.Item(0, i).Value = DGV2.Item(ind_col, i).Value + r("anag.descrizione").ToString.Trim
               DGV2.Item(ind_col, i).Value = DGV2.Item(ind_col, i).Value + Str(r("tempo").ToString.Trim) + "-" + r("tec.descrizione").ToString.Trim
               DGV2.Columns(ind_col).DefaultCellStyle.BackColor = Color.AliceBlue
               DGV2.DefaultCellStyle.WrapMode = DataGridViewTriState.True
               DGV2.Rows(i).Height = DGV2.Rows(i).Height + 5
    fine_impegno:
               ind_col = 0

           Next
       End Sub

       Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
           SW_Cale = 4
           DGV2.ColumnCount = 11
           DGV2.RowCount = 26
           ind_riga = 0
           ind_col = 1
           TextBox2.Text = DGV2.Columns(ind_col).HeaderText
           como_data = DGV2.Columns(ind_col).HeaderText
           como_data = como_data.AddDays(-10)
           TextBox3.Text = como_data.AddDays(-10)
           como_giorno = Mid$(como_data, 1, 2)
           como_mese = Mid$(como_data, 4, 2)
           como_anno = Mid$(como_data, 7, 4)

           DGV2.DataBindings.Clear()
           DGV2.DataSource = Nothing
           DGV2.DataMember = Nothing
           DGV2.Refresh()
           Call agenda1()
           Call verifica_impegni1()
       End Sub

       Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
           SW_Cale = 4
           DGV2.ColumnCount = 11
           DGV2.RowCount = 26
           ind_riga = 0
           ind_col = 1
           TextBox3.Text = DGV2.Columns(ind_col).HeaderText
           como_data = DGV2.Columns(ind_col).HeaderText
           como_data = como_data.AddDays(+10)
           TextBox2.Text = como_data.AddDays(+10)
           como_giorno = Mid$(como_data, 1, 2)
           como_mese = Mid$(como_data, 4, 2)
           como_anno = Mid$(como_data, 7, 4)

           DGV2.DataBindings.Clear()
           DGV2.DataSource = Nothing
           DGV2.DataMember = Nothing
           DGV2.Refresh()
           Call agenda1()
           Call verifica_impegni1()

       End Sub

       Private Sub Button4_Click(sender As Object, e As EventArgs) Handles Button4.Click
           DGV2.DataBindings.Clear()
           DGV2.DataSource = Nothing
           DGV2.DataMember = Nothing
           Me.Close()
       End Sub

       Private Sub Button3_Click(sender As Object, e As EventArgs) Handles Button3.Click
           If Button3.Text = "Chiudi" Then
               MonthCalendar1.Visible = False
               Button3.Text = "Scegli Data"
               Exit Sub
           End If
           MonthCalendar1.Visible = True
           Button3.Text = "Chiudi"
       End Sub

       Private Sub MonthCalendar1_DateSelected(sender As Object, e As DateRangeEventArgs) Handles MonthCalendar1.DateSelected

           como_data = MonthCalendar1.SelectionStart.ToString("dd/MM/yyyy")
           MonthCalendar1.Visible = False
           TextBox3.Text = ""
           TextBox2.Text = ""
           Button3.Text = "Scegli Data"

           ind_riga = 0
           ind_col = 1

           como_giorno = Mid$(como_data, 1, 2)
           como_mese = Mid$(como_data, 4, 2)
           como_anno = Mid$(como_data, 7, 4)

           TextBox3.Text = como_data
           como_data = como_data.AddDays(+30)
           TextBox2.Text = como_data

           DGV2.DataBindings.Clear()
           DGV2.DataSource = Nothing
           DGV2.DataMember = Nothing
           Call agenda1()
           Call verifica_impegni1()
       End Sub


       Private Sub Button5_Click(sender As Object, e As EventArgs) Handles Button5.Click
           If Button5.Text = "Help" Then
               RTB1.Visible = True
               Button5.Text = "Chiudi"
           Else
               RTB1.Visible = False
               Button5.Text = "Help"
           End If
       End Sub

  • Re: Form con datagridview che va alla prima ma non alla seconda chiamata

    Devi formattare il codice col pulsante code della toolbar. Non si posta così uno stralcio di codice nel forum….

  • Re: Form con datagridview che va alla prima ma non alla seconda chiamata

    Prima maschera

  • Re: Form con datagridview che va alla prima ma non alla seconda chiamata

    Maschera dopo

  • Re: Form con datagridview che va alla prima ma non alla seconda chiamata

    Ciao,

    1. Se usi delle variabili public devi sicuramente resettare il loro valore quando apri la form. Ma da quello che hai fornito non si riesce a capirlo a colpo d'occhio. (eventualmente valuta)
    2. Usa il debug e verifica passo passo come vengono inizillizzati e successivamente impostati i vari oggetti e le variabili.
    3. Perchè costruire un datagridview da codice quando lo puoi fare molto più comodamente in designer ? (preferenza mia personale) ;-))
    4. A titolo di prova/verifica metti in form load il reset degli oggetti principali:

    Esempio:

        DGV2.DataBindings.Clear()
        DGV2.DataSource = Nothing
        DGV2.DataMember = Nothing
        DGV2.Rows.Clear()
        DGV2.Columns.Clear()
        DGV2.Refresh()

    Ciao ;-)

  • Re: Form con datagridview che va alla prima ma non alla seconda chiamata

    Difficile capire la tua situazione, come ti hanno detto ti basterebbe seguire passo-a-passo e vedere cosa succede.
    Comunque un dubbio mi è venuto, e cioè: come fai a chiudere il form ?
    Se usi solo Close() il form non viene distrutto e quindi alla chiamata successiva non viene chiamato l'evemto Load()

    Fai una prova: una volta che il form è chiuso, fai un Dispose() del form e vedi che succede richiamandolo

  • Re: Form con datagridview che va alla prima ma non alla seconda chiamata

    08/04/2024 - SirJo ha scritto:


    Fai una prova: una volta che il form è chiuso, fai un Dispose() del form e vedi che succede richiamandolo

    Funzioni

    • SegnalaSegnala

    CitaCita

    Ciao, potrebbe … 

    ma non si comporta come per esempio in c# che quando chiudi i metodi e quindi anche al Close su Form, esegue anche il Dispose nel codice di progettazione della form?  
    Un modo semplice che userebbe il sistema per liberare la memoria… oppure no? non mi è mai capitato di verificarlo in vb.net. 

    Il metodo Close è così descritto:

    Remarks

    When a form is closed, all resources created within the object are closed and the form is disposed. You can prevent the closing of a form at run time by handling the Closing event and setting the Cancel property of the CancelEventArgs passed as a parameter to your event handler. If the form you are closing is the startup form of your application, your application ends.

    The two conditions when a form is not disposed on Close is when (1) it is part of a multiple-document interface (MDI) application, and the form is not visible; and (2) you have displayed the form using ShowDialog. In these cases, you will need to call Dispose manually to mark all of the form's controls for garbage collection.

    Document: https://learn.microsoft.com/en-us/dotnet/api/system.windows.forms.form.close?view=windowsdesktop-8.0

  • Re: Form con datagridview che va alla prima ma non alla seconda chiamata

    Ma un commento sul codice no?

    07/04/2024 - Zeusmax ha scritto:


    como_giorno = Mid$(como_data, 1, 2)
           como_mese = Mid$(como_data, 4, 2)
           como_anno = Mid$(como_data, 7, 4)

    a che serve? se hai due date (datainizio e datafine=datainizio + 9 giorni) a che serve estrapolare giorno mese e anno (anche se lo trasferisci in due editbox convertendolo a testo)?

    i dati da dove arrivano? da un foglio excel? da un database? da un file di testo? booh!!!

    se i dati provengono da un db filtri da a in base alla data di inizio. a che serve sapere il mese o il giorno?

    puoi spiegare cosa deve fare il programma?

    puoi chiamare i controlli con un nome che ricorda il loro ruolo? button1 non dice nulla al riguardo. come textbox

    scegli data lo sotituirei con “seleziona da:” e metterei un controllo datetime che modifica il secondo datetime (a data) come datetime +9 (sarebbero datainizio e datafine).

    la griglia la imposti una sola volta poi cambi il contenuto.

  • Re: Form con datagridview che va alla prima ma non alla seconda chiamata

    RISOLTO !!!

    salve ragazzi, grazie a chi mi ha consigliato di usare il dispose

    By65Franco grazie per avermi fatto capire di usare il dispose quando si usa form.showdialog da form MDI

    che è la mia situazione

Devi accedere o registrarti per scrivere nel forum
10 risposte