Visualizzazione dei risultati da 1 a 3 su 3
  1. #1
    Utente di HTML.it
    Registrato dal
    Nov 2010
    Messaggi
    44

    Datagridview e colonna calcolata senza dati

    Buongiono a tutti!
    Ho una form in cui ho inserito un bindingNavigator, delle textbox e un dgv
    ho definito un bindingsource che punta al dataset da cui carico le textbox,
    la bindingNavigator l'ho agganciata al bindingsource di cui sopra,
    la dgv si carica, nell'evento CurrentChanged del bindingnavigator, prendendo i dati da un datatable.
    ho aggiunto una colonna calcolata al datatable, usando la proprietà expressions
    la colonna calcolata viene effettivamente aggiunta al datatable e ne vedo l'intestazione nel dgv, ma non c'è nessun valore!!!!

    per caricare il dgv procedo in questo modo:
    creo un dataadapter, gi passo una stringa sql e la stringa di connessione
    faccio un fill della datatable (12 colonne e tutte le mie righe sono caricate)
    creo una nuova colonna
    definisco il calcolo che voglio fare (e il calcolo lo fa, lo vedo nel debag)
    aggiungo la colonna al datatable (che ora ha 13 colonne e tutte le mie righe)

    definisco come bs il datatable
    istanzio una dgv e metto come datasource di quest'ultima il bs di cui sopra.

    dove sbaglio??

    posto il codice che mi carica il dgv.
    Grazie.

    codice:
    Dim DaRicette_dett As New OleDb.OleDbDataAdapter(sqlDgv, Start.GetStrDataBase)
             Dim commandBuilder As New OleDb.OleDbCommandBuilder(DaRicette_dett)
    
            ' popolo una nuova tabella 
            Dim DTricette_dett As New DataTable()
            DaRicette_dett.Fill(DTricette_dett)
    
            'definisco i campi che mi servono per la colonna calcolata
            Dim quantita As Double
            Dim nPeso As Double
            Dim energia As Integer
            Dim densita As Double
            Dim conversione As Integer
            Dim edibile As Integer
    
            quantita = DTricette_dett.Rows(0)("Qta")
            nPeso = DTricette_dett.Rows(0)("n_peso")
            energia = DTricette_dett.Rows(0)("energia kcal")
            densita = DTricette_dett.Rows(0)("densita")
            conversione = DTricette_dett.Rows(0)("conversione")
            edibile = DTricette_dett.Rows(0)("edibile")
    
            Dim convUsare As Double
            For Each Dr As DataRow In DTricette_dett.Rows
                If conversione > 0 Then
                    convUsare = conversione
                Else
                    convUsare = nPeso
                End If
            Next
    
            Dim TKcalQta As New DataColumn()
            TKcalQta.ColumnName = "KcalQta"                              
            TKcalQta.DataType = GetType(Double)                       
            TKcalQta.Expression = "(quantita * convUsare * energia * densita * edibile)/10000"  
              DTricette_dett.Columns.Add("TKcalQta")                       
    
            'definisco il datasource del dgv e quindi lo carico
            bsRicette_dett.DataSource = DTricette_dett
            DgVRicette_dett.DataSource = bsRicette_dett

  2. #2
    Utente di HTML.it
    Registrato dal
    Nov 2010
    Messaggi
    44
    Ho capito che non poteva andare.....
    Ho provato a ciclare le righe del datatable, ma ovviamente , se imposto una variabile per memorizzare il calcolo, tiene solo l'ultimo valore che le passo....

    insomma
    codice:
      Dim DaRicette_dett As New OleDb.OleDbDataAdapter(sqlDgv, Start.GetStrDataBase)
            ' creo un command builder per generare le istruzioni SQL update, insert, and delete commands sulla base di una sql (SQLDGV).
            ' le uso per fare l'update del database.
            Dim commandBuilder As New OleDb.OleDbCommandBuilder(DaRicette_dett)
    
            ' popolo una nuova tabella e la lego al BindingSource.
            Dim DTricette_dett As New DataTable()
            DaRicette_dett.Fill(DTricette_dett)
            bsRicette_dett.DataSource = DTricette_dett
    
            'definisco i campi che mi servono per la colonna calcolata
            Dim pquantita As Double
            Dim pnPeso As Double
            Dim penergia As Integer
            Dim pdensita As Double
            Dim pconversione As Integer
            Dim pedibile As Integer
            Dim i As Integer
            Dim ii As Double
    
                pquantita = DTricette_dett.Rows(i)("Qta")
                pnPeso = DTricette_dett.Rows(i)("n_peso")
                penergia = DTricette_dett.Rows(i)("energia kcal")
                pdensita = DTricette_dett.Rows(i)("densita")
                pconversione = DTricette_dett.Rows(i)("conversione")
                pedibile = DTricette_dett.Rows(i)("edibile")
    
                Dim convUsare As Double
                'For Each Dr As DataRow In DTricette_dett.Rows
                If pconversione > 0 Then
                    convUsare = pconversione
                Else
                    convUsare = pnPeso
                End If
                ii = (pquantita * convUsare * penergia * pdensita * pedibile) / 10000
    
    
    
            Next
    
            DTricette_dett.Columns.Add("SS", GetType(Double), ii)
    va un po' meglio, ma non molto....
    ovviamente mi carica solo il valore dell'ultimo prodotto della mia dgv...
    e non sempre... devo ancora capire la variabilià a che errore è collegabile...
    Un aiutino????
    Grazie

  3. #3
    Utente di HTML.it
    Registrato dal
    Nov 2010
    Messaggi
    44
    La dgv carica la colonna calcolata solo quando
    ii non ha decimali
    eppure è un tipo double.... come mai?
    Potete aiutarmi?

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.