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

    [VB.NET 2010 win form] esiste un metodo opposto al .SetValue() in DataGridView ?

    Ultimamente sono in vena di richieste...

    Premesso che per settare i valori di una riga esistente in datagridview esiste il metodo .SetValue() che passandoli una matrice unidimenzionale come parametro, riempie le celle della riga con rispettivi i valori della matrice...

    faccio un piccolo esempio per la riga 0 di una tabella a 12 colonne (quindi 12 valori per riga):
    codice:
            Dim RigaArray() As String = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12}
            TabellaGrid.Rows(0).SetValues(RigaArray)
    ora, vorrei sapere se esiste un metodo che permette di fare esattamente il procedimento opposto (naturalmente senza ricorrere all'iterazione): estrae tutti i valori delle celle di una riga essistente e li mette in una matrice in un sol colpo?!
    seguendo la logica dei nomi, dovrebbe chiamarsi .Get.Value ma non lo trovo !!

    inventandomi un metodo GetValue, dovrebbe diventare così:
    codice:
    dim RigaArray() as String = TabellaGrid.rows(0).GetValues()
    Michele

  2. #2
    Guardando su MSDN non mi sembra esista nulla del genere. Se ti serve quel metodo puoi sempre crearti una piccola function, ma dovrai necessariamente iterare su tutte le celle.
    Chi non cerca trova.

  3. #3
    Utente di HTML.it L'avatar di alpynet
    Registrato dal
    Mar 2010
    Messaggi
    123
    Ciao, in alternativa potresti usare questo:
    codice:
    Dim RigaArray As DataGridViewCellCollection = TabellaGrid.rows(0).Cells
    MessageBox.Show(RigaArray(0).Value)

  4. #4
    Originariamente inviato da alpynet
    Ciao, in alternativa potresti usare questo:
    codice:
    Dim RigaArray As DataGridViewCellCollection = TabellaGrid.rows(0).Cells
    MessageBox.Show(RigaArray(0).Value)
    ho provato a parte che ho dovuto aggiungere un altro indice come riferimento alla cella..

    MessageBox.Show(RigaArray(0).Value(0))

    non è proprio quello che intendevo fare...quello postato, strutturalmente non è che cambi molto dalla normale chiamata alla singola cella..

    invece sto valutanto il suggerimento di ripiegare a una funzione che mi ritorna un array di valori delle celle di una determinata riga di qualsiasi tabella (di tipo datagridviewrow), passata come parametro...
    come si può cambiare la struttura di questa function per avere tempi di elaborazione bassi ove sono richieste chiamate multiple?
    ps. ho inserito un controllo per eventuali righe Nothing (vedi CurrentRow) restituendo Nothing (in quel caso preferisco sia così)..
    codice:
        Function GetRowValues(ByRef Row As DataGridViewRow) As Object
    
            ' se la riga di riferimento è su Nothing, restituisce Nothing
            If IsNothing(Row) Then Return Nothing
    
            ' dichiaro un nuovo arraylist
            Dim RigaValues As New ArrayList
    
            ' ciclo tutte le celle delle riga
            For Each Cella As DataGridViewCell In Row.Cells
    
                ' aggiungo un nuovo elemento all'ArrayList con il valore cella
                RigaValues.Add(Cella.Value)
    
            Next Cella
    
            ' restituisco il contenuto ArrayList convertito in Array
            Return RigaValues.ToArray
    
        End Function
    per esempio viene chiamata così:
    codice:
    Dim RigaArray As System.Array = GetRowValues(TabellaGrid.CurrentRow)
    oppure in un ciclo per tutte le righe della tabella.
    codice:
            Dim ListaVet As New ArrayList
            For Each RigaTabella As DataGridViewRow In ElencoDataGridView.Rows
                ListaVet.Add(GetRowValues(RigaTabella))
            Next
    l'importante che la funzione restituisca un Array di elementi Object che si setteranno in automatico in base al tipo della cella in Datagridview.. (es..tipi data, testo, nothing, etc..)
    Michele

  5. #5
    Utente di HTML.it L'avatar di alpynet
    Registrato dal
    Mar 2010
    Messaggi
    123
    Originariamente inviato da michelecali
    ho provato a parte che ho dovuto aggiungere un altro indice come riferimento alla cella..

    MessageBox.Show(RigaArray(0).Value(0))

    non è proprio quello che intendevo fare...quello postato, strutturalmente non è che cambi molto dalla normale chiamata alla singola cella..
    .....................
    Ciao, ho provato..., ho vb.net 2010, ma DataGridViewCellCollection richiede solo l'indice della cella, e l'indice al "Value" proprio non ci va. Il valore della cella viene restituito semplicemente con questa chiamata: RigaArray(0).Value.

    Costruirsi una funzione, come hai fatto, va più che bene, soprattutto se le tue esigenze sono queste. Comunque all'atto pratico, anche con la tua funzione, per richiamare un valore dell'array devi usare un indice..

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.