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

    [VB.NET] Problema con binding

    Ciao a tutti!

    Premetto che ho cercato un po' in giro, ma non sono riuscito a trovare una soluzione "pulita" al mio problema!

    Allora...vi spiego il mio problema

    Nel mio programma c'è un modulo (per la gestione database -in modalità disconessa-) in cui ho un dataset con dentro due datatable (riempita tramite il fill di un SqlDataAdapter). In una form ho creato una binding source bindata al dataset e ho impostato come datamember una delle tue tabelle di cui è composto il dataset.

    Dopodichè sempre nella form ho creato un bindingnavigator (bindata alla binding source), una datagridview (bindata alla binding source) e dei controlli (textbox e vari radiobutton) tutti bindati alla binding source e in particolari ai campi della tabella.
    In questo modo navigando tramite il bindingnavigator all'interno della datagridview mi si aggiornano corretamente i dati nelle textbox e mi si valorizzano correttamente anche i radiobutton. Se modifico le textbox o i radiobutton e chiamo l'endedit mi si valorizza correttamente anche la datatable (quindi funziona bidirezionalmente).

    Il problema nasce quando tramite il bindingnavigator aggiungo una nuova riga. Se dopo averla aggiunta la seleziono nelle textbox mi continuano a rimanere le informazioni della riga
    precedente e avendo messo la datagridview come readonly non so quindi come permettere all'utente di editarla.

    Potrei intercettare il click sulla nuova riga e azzerare così i campi e aggiungere un altro
    tasto per confermare, ma non mi sembra una soluzione tanto bella ^^

    Avete percaso dei consigli?

    Scusate se sono stato poco chiaro, ma ho cercato di descrivere tutta la problematica!

    Grazie per qualsiasi consigli potrete darmi

    P.S.

    Scusate pe ril titolo un po' generico ma non sono riuscito a sintetizzare un titolo decente

  2. #2
    Aggiungo un'informazione: praticamente quando aggiungo una nuova riga dal bindingnavigator è come se le textbox e i vari radiobutton perdessero per quella riga il binding.

    Il binding dei controlli l'ho creato così:

    es. per textbox

    TxtRagSociale.DataBindings.Add(New Binding("Text", bsFattureClienti, "RagioneSociale"))

    es. per radiobutton

    RdbPagRiba.DataBindings.Add(New Binding("Checked", bsFattureClienti, "PagamentoRiba"))

    dove bsFattureClienti è la bindingsource

    Grazie mille

  3. #3
    Scusate se continuo a postare, ma ho altri aggiornamenti

    Smanettando un po' mi sono accorto che in effetti quando tramine il binding navigator aggiungo una nuova riga il conteggio delle righe effettivamente aumenta (nel binding navigator), ma se provo a spostarmi tramite i bottoni previous item e next item del binding navigator noto che non si posiziona mai sulla riga appena aggiunta.

    Credo quindi sia un errore di progettazione. Il problema è che non ho soluzioni alternative decenti (a meno di non riscrivere una "grande" parte del codice, poi ormai è anche una uqestione di principio ). L'obbiettivo sarebbe quello di riuscire tramite il bindingnavigator a creare una nuova riga da popolare tramite i controlli bindati (textbox e radiobutton) e salvare poi il tutto tramite il bottone salva del binding navigator (a cui ho associato un endedit della bindingsource e un upload del dataadapter).

    Per completezza vi poso il codice dove creo il binding e il dataset.

    creazione dataset (in un modulo chiamato mydb)
    codice:
    Public Sub Inizializza()
    
            Try
    
                'istanzio il dataset e le datatable
                dsFatture = New DataSet
                Fattureclienti = New DataTable
                FattureFornitori = New DataTable
                
                'aggiungo le datatable al dataset
                dsFatture.Tables.Add(Fattureclienti)
                dsFatture.Tables.Add(FattureFornitori)
    
    
            Catch ex As Exception
    
                MyError.ScriviLogErrore(ex.Message)
                MyError.VisualizzaMessaggioErrore(ex.Message)
    
            End Try
    
        End Sub
    creazione della bindingsource e binding dei vari elementi (in una form a parte)

    codice:
    Private Sub CreazioneBinding()
    
            Try
    
                bsFattureClienti = New BindingSource
                bsFattureClienti.AllowNew = True
                bsFattureClienti.DataSource = MyDb.dsFatture
                bsFattureClienti.DataMember = "FattureClienti"
                BnFattureClienti.BindingSource = bsFattureClienti
                DgvFattureCliente.DataSource = bsFattureClienti
    
            Catch ex As Exception
    
                MyError.ScriviLogErrore(ex.Message)
    
            End Try
    
        End Sub
    binding dei controlli

    codice:
        Private Sub BindingControlli()
    
            Try
    
                TxtRagSociale.DataBindings.Add(New Binding("Text", bsFattureClienti, "RagioneSociale"))
                TxtCodCliente.DataBindings.Add(New Binding("Text", bsFattureClienti, "CodiceCliente"))
                TxtCodFattura.DataBindings.Add(New Binding("Text", bsFattureClienti, "CodiceFattura"))
                TxtImporto.DataBindings.Add(New Binding("Text", bsFattureClienti, "Importo"))
                RdbPagRiba.DataBindings.Add(New Binding("Checked", bsFattureClienti, "PagamentoRiba"))
                RdbPagScontato.DataBindings.Add(New Binding("Checked", bsFattureClienti, "PagamentoScontato"))
                CkbPagata.DataBindings.Add(New Binding("Checked", bsFattureClienti, "Pagato"))
                CmbScadenza.DataBindings.Add(New Binding("SelectedItem", bsFattureClienti, "GiorniScadenza"))
                LblScadenza.DataBindings.Add(New Binding("Text", bsFattureClienti, "DataScadenza"))
    
            Catch ex As Exception
    
                MyError.ScriviLogErrore(ex.Message)
                MyError.VisualizzaMessaggioErrore(ex.Message)
    
            End Try
    
        End Sub
    Grazie a tutti (tranne ai creatori delle binding source )

  4. #4
    Se qualcuno avesse il mio stesso problema per adesso ho risolto così:

    Ho cambiato la proprietà AddNewItem del bindingnavigator in (nessuno) in modo da poter gestire completamente l'evento poi ho scritto queste procedure:

    codice:
    Private Sub BindingNavigatorAddNewItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BindingNavigatorAddNewItem.Click
    
            'creo una nuova riga e la valorizzo con i controlli
            Dim dr As Data.DataRow
    
            dr = MyDb.dsFatture.Tables("FattureClienti").NewRow()
    
            dr("CodiceFattura") = TxtCodFattura.Text
            dr("RagioneSociale") = TxtRagSociale.Text
            dr("CodiceCliente") = TxtCodCliente.Text
            dr("Importo") = TxtImporto.Text.Replace(".", ",")
            dr("PagamentoRiba") = RdbPagRiba.Checked
            dr("PagamentoScontato") = RdbPagScontato.Checked
            dr("GiorniScadenza") = CmbScadenza.SelectedItem
            dr("DataScadenza") = LblScadenza.Text
            dr("Pagato") = CkbPagata.Checked
    
            If dr("CodiceFattura") <> "" Then
    
                InserisciRiga(dr)
    
            Else
    
                MessageBox.Show("Attenzione valorizzare il campo codice fattura", "Attenzione", MessageBoxButtons.OK, MessageBoxIcon.Information)
    
            End If
    
        End Sub
    
        Private Sub InserisciRiga(ByVal row As DataRow)
    
            Try
    
                'aggiungo la riga alla tabella
                MyDb.dsFatture.Tables("FattureClienti").Rows.Add(row)
                
                'importante : questa riga ho dovuto aggiungerla perchè essendo i controlli bindati alla tabella quando poi avrei salvato mi avrebbe modificato anche la riga che avevo selezionato prima, così invece mi annulla i cambiamenti sul binding
    
                bsFattureClienti.CancelEdit()
    
                MyDb.SalvaFattureClienti()
    
            Catch ex As Exception
    
                MyError.ScriviLogErrore(ex.Message)
                MyError.VisualizzaMessaggioErrore(ex.Message)
    
            End Try

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.