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

    [VB.NET 2005]La datagridview non restituisce il corretto numero delle sue righe.

    Ciao amici,
    ho rilevato con un database Access e un database Firebird che il controllo datagridview con la proprietà rows.count e anche il datagrid con la propietà visiblerowcount non restituisce il corretto numero di righe ma una riga in piu, e quindi non le numera correttamente. Con la datagridview per ottenrere l'ultima riga devo scrivere me.datagridview1.rows.count -2 e non me.datagridview1.rows.count -1 .
    Ho fatto le prove con dei semplici progetti. Per dovere di chiarezza devo aggiungere che solo in un semplice progetto dei miei la datagridview funziona correttamente. Ho fatto le prova anche in una altra partizione del mio computer per essere certo di non avere dei problemi di incompatibilita o di virus. La cosa mi sembra strana.
    Incomuncio a pensare che si tratti di un bug di VB.NET. La cosa è grave perche quella proprietà è importante per le applicazioni. Forse non è un problema di VB:NET 2005 ma solo di VB.NET express?
    Cerco riscontri nell'esperienza di altri.
    Grazie.
    Giorgio
    L'esperienza è il tipo di insegnante più difficile. Prima ti fa l'esame, e poi ti spiega la lezione. (Oscar Wilde)

  2. #2
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,472
    L'edizione Express non ha a che vedere col problema: la libreria del .NET Framework 2.0 è la stessa per entrambi.

    La collection Rows include tutte le righe presenti nella griglia, probabilmente anche quelle che costituiscono l'intestazione e così via.

    Se è il modo per ottenere il numero di record, non credo sia la via più affidabile.
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

  3. #3
    Dalla guida MSDN: la propietà Datagridview.rows ottiene tutte le righe del controllo datagridview.
    Eccoti un esempio (prelevato dalla MSDN) che dimostra quanto sia utile la proprietà datagridview.rows.
    Nell'esempio si dimostra come usare l'evento DatagridviewRowsRemoved usando appunto la proprietà di cui sopra:

    codice:
    Private Sub CellValueChanged(ByVal sender As Object, _
        ByVal e As DataGridViewCellEventArgs) _
        Handles DataGridView1.CellValueChanged
    ' Update the balance column whenever the values of any cell changes.
        
        UpdateBalance()
    End Sub
    
    Private Sub RowsRemoved(ByVal sender As Object, _
        ByVal e As DataGridViewRowsRemovedEventArgs) _
        Handles DataGridView1.RowsRemoved
    
        ' Update the balance column whenever rows are deleted.
        UpdateBalance()
    End Sub
    
    Private Sub UpdateBalance()
        Dim counter As Integer
        Dim balance As Integer
        Dim deposit As Integer
        Dim withdrawal As Integer
    
         ' Iterate through the rows, skipping the Starting Balance Row.
        For counter = 1 To (DataGridView1.Rows.Count - 2)
            deposit = 0
            withdrawal = 0
            balance = Integer.Parse(DataGridView1.Rows(counter - 1) _
                .Cells("Balance").Value.ToString())
    
            If Not DataGridView1.Rows(counter) _
                .Cells("Deposits").Value Is Nothing Then
    
                 ' Verify that the cell value is not an empty string.
                If Not DataGridView1.Rows(counter) _
                    .Cells("Deposits").Value.ToString().Length = 0 Then
                    deposit = Integer.Parse(DataGridView1.Rows(counter) _
                        .Cells("Deposits").Value.ToString())
                End If
            End If
    
            If Not DataGridView1.Rows(counter) _
                .Cells("Withdrawals").Value Is Nothing Then
                If Not DataGridView1.Rows(counter) _
                    .Cells("Withdrawals").Value.ToString().Length = 0 Then
                    withdrawal = Integer.Parse(DataGridView1.Rows(counter) _
                        .Cells("Withdrawals").Value.ToString())
                End If
            End If
    
            DataGridView1.Rows(counter).Cells("Balance").Value = _
                (balance + deposit + withdrawal).ToString()
        Next
    End Sub
    Preciso poi che nel mio progetto rimuovendo la vecchia istanza della datagridview che funziona e sostituendola con una nuova attuale istanza, i valori restituiti dalla proprietà rows differiscono di 1.

    Quindi evidentemente si tratta di un bug introdotto dal SP1 rilasciato dalla Microsoft.
    Segnalerò la cosa alla Microsoft.

    P.S.
    Questo forum che resta sempre valido. Segnalo però che funzionano male i form per l'introduzione di testo per il Code il Quote e il Color.
    Grazie.
    Giorgio
    L'esperienza è il tipo di insegnante più difficile. Prima ti fa l'esame, e poi ti spiega la lezione. (Oscar Wilde)

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.