Errore nel CheckBox

di il
3 risposte

Errore nel CheckBox

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 è causa del malfunzionamento.
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")
[color=#FF0000]Questa è la riga incriminata[/color]    
    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.

3 Risposte

Devi accedere o registrarti per scrivere nel forum
3 risposte