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

    Errore gravissimo nel controllo 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")
    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.

  2. #2

  3. #3
    Sarà, ma non funziona nemmeno con il 2010.

  4. #4
    Utente di HTML.it L'avatar di gibra
    Registrato dal
    Apr 2008
    residenza
    Italy
    Messaggi
    4,244
    ... e perché non il 2013 ?

    Comunque, nella tabella che TIPO di campi è Sospeso ?

  5. #5
    Quote Originariamente inviata da gibra Visualizza il messaggio
    ... e perché non il 2013 ?

    Comunque, nella tabella che TIPO di campi è Sospeso ?

    [QUOTE]Ho scoperto l'inghippo.[
    il CheckBox riciede un binding con il controllo di formattazione per cui è stato sufficiente aggiungere True alla fine dell'istruzione di binding.

    Grazie dell'interessamento e a risentirci./QUOTE]

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.