Hoe aantal dagen tussen verticaal geordende datums berekenen in DataGridView

Status
Niet open voor verdere reacties.

redseujac

Nieuwe gebruiker
Lid geworden
12 okt 2009
Berichten
4
Ik heb een simpele DataGridView ontworpen zonder onderliggende database.

Hij bevat 9 kolommen, namelijk:
Datum - Dagen - Schuld - Afbetaling - Rentevoet - Hoofdsom - Interest - Toerekening - Saldo

Door middel van tekstvakjes kan de gebruiker gegevens opgeven voor:
Datum - Schuld - Afbetaling - Rentevoet.

Met de opdrachtknop Berekenen worden de overige kolommen berekend, zo ook de kolom "Dagen".

Deze kolom moet het aantal dagen bevatten die liggen tussen de achtereenvolgende datums uit de kolom "Datum".

Ik slaag er helaas niet in VB-code te schrijven die het verschil in dagen tussen de verticaal geordende datums uit de eerste kolom berekent en het resultaat neerzet in de tweede kolom.

Voor 2 horizontaal geordende datums (op dezelfde rij in 2 kolommen) heb ik geen enkel probleem, maar hier lukt het mij niet met deze onder elkaar staande datums.

Bijkomend probleem is dat het eerste resultaat in de kolom "Dagen" begint op de tweede rij (verschi tussen datum 2 en datum 1 wordt geplaatst naast datum 2). Het eerste vakje in de kolom "Dagen" moet dus leeg blijven.

Kan iemand mij op de goede weg zetten met een aangepaste "For ... Next" lus of op een andere manier mijn probleem oplossen?

De oplossing en berekening moet gebeuren in DataGridView.

Hartelijk dank!

Jacques
DataGridView_Toerekening.jpg
 
Laatst bewerkt:
Mischien helpt dit je verder
Code:
Dim date1, date2
        Try

            For Each NRow In Me.DatumDataGridView.Rows
                date1 = CType(NRow.Cells(0).Value(), String) 'dit is de datum in je datagrid
                date2 = TextBox1.Text 'zet hier de datum van waar je rekenen wil
                If NRow.Cells(0).Value IsNot DBNull.Value Then
                    NRow.Cells(1).value() = DateDiff(DateInterval.Day, date2, date1) 'Dit het aantaldagen
                End If

            Next
        Catch ex As Exception

        End Try
 
Hartelijk dank voor het antwoord.

Helaas is dit niet helemaal zoals gewenst: het aantal dagen in de tweede kolom ("Dagen") moet automatisch worden berekend aan de hand van alle datums in de eerste kolom ("Datum"), wanneer de gebruiker klikt op de knop "Berekenen", zonder verdere handmatige tussenkomst.

Date2 = Textbox1.Text klopt dus eigenlijk niet.

De verticaal geordende datums moeten automatisch van elkaar worden afgetrokken en het resultaat daarvan telkens neergezet in de kolom "Dagen".

Zie ook voor dat alles de bijlage aan mijn eerste post. Meteen ziet u daar ook dat het eerste resultaat moet worden neergezet in de tweede rij van de kolom "Dagen" en dat het eerste vakje van die kolom leeg moet blijven.

Kan de code in die zin worden aangepast?

Dank!

Jacques
 
Als je in de textbox de eerste datum set geeft het in cel 1 van dagen een 0
in cel twee van dagen 31 dagen tellen in je voorbeeld.
of begrijp ik je niet?
 
Ik denk inderdaad dat we elkaar niet correct begrijpen.

Als je even kijkt naar de bijlage bij mijn eerste post dan zie je alle gegevens die de gebruiker heeft opgegeven (ingevoerd) met de tekstvakjes bovenaan rechts.

Dit is de eerste fase in het programma: invoer van de gegevens.

De volgende fase is de berekening aan de hand van al de ingevoerde gegevens: als de gebruiker klikt op de knop "Berekenen", moeten alle volgende berekeningen worden uitgevoerd: het aantal dagen (kolom 2) tussen de datums die zich al op het blad bevinden (kolom 1), de hoofdsommen, de interesten, de toerekeningen en het saldo, dit alles automatisch rij per rij om het uiteindelijke saldo te bereiken op de laatste rij van de laatste kolom (saldo). Met slechts één enkele klik op de knop Berekenen wordt dit alles automatisch uitgevoerd.

In de berekening kan dus geen beroep worden gedaan op de inhoud van de tekstvakjes, zoals bv. het tekstvakje "Datum" gebezigd in jouw suggestie.

Men zou uiteraard bij het invoeren van de gegevens (wanneer de gebruiker klikt op de knop "Toevoegen" of drukt op Enter) de berekening van het aantal dagen meteen kunnen laten gebeuren, maar dat is niet wat ik voor ogen heb.
 
Oke wat is de zin van het onderelkaar zetten van de gegevens

kan je niet gewoon achterelkaar zetten data1 data2 dagen.

code is dan als volgt
deze onder de bereken knop of op de plaats die je wild

Code:
 Dim date1, date2
        Try

            For Each NRow In Me.DatumDataGridView.Rows
                date1 = CType(NRow.Cells(0).Value(), String) 'dit is de datum1 in je datagrid
                date2 = CType(NRow.Cells(1).Value(), String) 'dit is de datum2 in je datagrid

                               If NRow.Cells(0).Value IsNot DBNull.Value Then
                    NRow.Cells(2).value() = DateDiff(DateInterval.Day, date1, date2) 'Dit het aantaldagen in de grid
                End If
            Next
        Catch ex As Exception

        End Try
zie voorbeeld

Knipsel.JPG
 
Laatst bewerkt:
De datums naast elkaar plaatsen is geen optie als onderdeel van het geheel van de DataGridView. De schuldbedragen, afbetalingsbedragen, enz. moeten immers netjes naast elke datum afzonderlijk komen in de Grid, zo niet lukken de berekeningen niet meer.

Ik heb intussen zelf een oplossing gevonden die werkt met de DataGradView zoals die door mij is geconfigureerd in de bijlage van mijn eerste post.

Ik plaats de code van mijn oplossing hieronder voor personen die hetzelfde probleem mochten hebben:

Code:
Dim rowIndexBase As Integer = 0

With DataGridView1

   For rowIndexBase = 0 To .Rows.Count - 2  
                Dim dteStartDate As Date = CDate(.Item(0, rowIndexBase).Value)
                Dim dteEndDate As Date = CDate(.Item(0, rowIndexBase + 1).Value)
                Dim dteDiff As Integer = dteEndDate.Subtract(dteStartDate).TotalDays
                .Item(1, rowIndexBase + 1).Value = dteDiff.ToString
    Next

End With
Nogmaals dank voor jouw inspanningen om me een oplossing aan te reiken.
 
Goed dat het is opgelost sucses met je project.

groet Old Hippy
 
Laatst bewerkt:
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan