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.
 
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 -