1 messaggio dal 01 maggio 2015
Dopo due anni di lavoro credo di aver scoperto un grave malfunzionamento nel Controllo <BindingSource> di VisualStudio 2005.

Per una sicura conferma ho implementato il programma di prova esposto di seguito da cui è possibile rilevare dove e come si verifica.
La finestra di DataEntry è composta da una Form contenente:
?3 controlli TextBox per la visualizzazione e inserimento dei dati
?1 controllo CheckBox per impostare lo stato di sospensione dei record
?1 controllo DataGridView per visualizzare la lista dei record
?1 controllo BindingNavigator per operare la navigazione tra i record e i comandi di Inserimento, Modifica e Cancellazione dei dati
?1 controllo BindingSource per gestire il contenuto della Tabella



Il programma è volutamente semplificato in modo da lasciare tutta la gestione della procedura ai due controlli BindingSource e BindingNavigator debitamente collegati.
Il controllo DataGridView è stato utilizzato solamente per visualizzare il risultato delle varie operazioni.
I pulsanti standard del BindingNavigator controllano l'Inserimento o la Cancellazione di una riga.

La riga di programma evidenziata in giallo (Commentata) è causa del malfunzionamento.
&#8195;

Public Class Form6
    Dim strConn As String = 
        "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=e:\database\Vendite.mdb"
    Dim cn As OleDb.OleDbConnection     ' Connessione
    Dim ds As DataSet                   ' Data Set
    Dim da As OleDb.OleDbDataAdapter    ' DataAdapter

    Sub New()
        ' Chiamata richiesta da Progettazione Windows Form.
        InitializeComponent()

        ' Aggiungere le eventuali istruzioni di inizializzazione
        ' dopo la chiamata a InitializeComponent().
        ds = New
        da = New OleDb.OleDbDataAdapter("SELECT * FROM Prodotti", strConn) 
        da.Fill(ds, "Prodotti")
    End Sub

    Private Sub Form6_Load(ByVal sender As System.Object, _
                           ByVal e As System.EventArgs) Handles MyBase.Load
        ' collega binding al dataset sulla tabella Prodotti 
        With BindingSource
            .DataSource = ds.Tables("Prodotti")
            .Sort = "NomeProdotto ASC"
        End With
        txtId.DataBindings.Add("Text", BindingSource, "IDProdotto")
        txtProdotto.DataBindings.Add("Text", BindingSource, "NomeProdotto")
        txtConfezione.DataBindings.Add("Text", BindingSource, "QuantitàPerUnità")
        txtPrezzo.DataBindings.Add("InputText", BindingSource, "PrezzoUnitario")
        'chkSospeso.DataBindings.Add("Checked", BindingSource, "Sospeso")

        ' Collega Navigatore Utenti
        BindingNavigator.BindingSource = BindingSource
        ' Collega DataGrid
        With DataGridView
            .DataSource = BindingSource
            .AllowUserToAddRows = False         
            .AllowUserToDeleteRows = False      
            .AllowUserToOrderColumns = False    
            .AllowUserToResizeColumns = False   
            .AllowUserToResizeRows = False      
            .ReadOnly = True                    
            .RowHeadersVisible = False          
            ' MODALITA' DI SELEZIONE
            .SelectionMode = DataGridViewSelectionMode.FullRowSelect       
            .MultiSelect = False                                        
            ' LAYOUT
            .AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.AllCells
            .AutoSizeRowsMode = DataGridViewAutoSizeRowsMode.None
            With .RowTemplate
                .Height = 18
                .MinimumHeight = 18
                .Resizable = DataGridViewTriState.False
            End With
            .Columns("IDProdotto").Visible = False
            .Columns("IDFornitore").Visible = False
            .Columns("IDCategoria").Visible = False
            .Columns("Scorte").Visible = False
            .Columns("QuantitàOrdinata").Visible = False
            .Columns("LivelloDiRiordino").Visible = False
        End With
    End Sub
End Class

Collegando in Binding il controllo CheckBox si vuole poter inserire o meno un flag il cui scopo è quello di evidenziare lo stato (Sospeso/Attivo) del prodotto relativo.
?Con la suddetta riga esclusa (Commentata) gli Inserimenti di nuove righe vanno perfettamente a buon fine (ad ogni pressione sul tasto il cursore del DataGridView si sposta correttamente sul nuovo record inserito all'ultima riga e trasferisce il contenuto di questa riga nei relativi controlli collegati. Inserendo i nuovi dati nei controlli TextBox vengono correttamente inseriti nella nuova riga secondo le specifiche dell'ordinamento.
?Con la suddetta riga inserita, la pressione sul tasto lascia il cursore del DataGridView nella posizione in cui si trova e tutti i nuovi dati eventualmente inseriti sovrascrivono i dati della posizione corrente.
Dopo svariate prove, ho potuto constatare che solo i controlli CheckBox e OptionBox provocano questo malfunzionamento quando collegati in Binding da programma.

P.S. Nelle guide di Visual Studio non ho trovato nessuna specifica in tal senso.

Modificato da mauroschivalocchi il 04 maggio 2015 12.17 -
Modificato da mauroschivalocchi il 06 maggio 2015 10.38 -
Modificato da mauroschivalocchi il 06 maggio 2015 10.40 -

Torna al forum | Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.