[Visual Basic] Cambiare lo stato in checked delle checkbox richiamando dati dal database

migo80

Utente Attivo
25 Apr 2013
239
3
18
Buona sera, spero che mi possiate aiutare.
Vorrei un aiuto su come potrei fare, richiamando dei dati presenti su di un database access e memorizzati in questo modo:
nome del campo ckb_name
"checkbox1,checkbox2,checkbox3,checkbox4", confrontarli con le checkbox presenti nel form e far cambiare automaticamentelo status in checked alle sole checkbox con i nomi uguali a quelli dei dati su database.
Spero in un vostro aiuto, un grazie in anticipo!
 

Rikk73

Utente Attivo
7 Apr 2015
139
6
18
Arezzo
le checkbox hanno una proprietà che è appunto checked che accetta un valore booleano, da codice puoi semplicemente fare

Codice:
nomeCheckBox.Checked = condizione == true ? true : false;
 

migo80

Utente Attivo
25 Apr 2013
239
3
18
Grazie per avermi risposto ora le mostro il codice che crea le checkbox e il tutto funziona bene
Codice:
Private Sub frmTest_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        SQLString = "SELECT * FROM ckb_list"
        Dim posx As Integer, posy As Integer
        Conn = New OleDbConnection(connStr)
        Adapter = New OleDbDataAdapter(SQLString, Conn)
        Conn.Open()

        table = New DataTable()
        Adapter.Fill(table)
        nrec = table.Rows.Count
        ReDim arrCH(nrec - 1)
        For I As Integer = 0 To nrec - 1
            arrCH(I) = New CheckBox
            colore = table.Rows(I)("ckb_color").ToString
            posx = 6
            posy = 10 + 40 * I
            arrCH(I).Location = New Point(posx, posy)
            arrCH(I).Font = New Font("verdana", 8, FontStyle.Bold)
            arrCH(I).Size = New Size(495, 40)
            arrCH(I).ForeColor = Color.FromName(colore)
            arrCH(I).Text = table.Rows(I)("lista_ckb").ToString
            SplitContainer1.Panel1.Controls.Add(arrCH(I))
        Next

questo è la porzione di codice che mi salva le checkbox selezionate in una tabella chiamata "ckb_checked" anche questo funziona:

Codice:
Dim ckb_txt As String
        Dim checkedItems As New List(Of String)
        For Each cb As CheckBox In SplitContainer1.Panel1.Controls.OfType(Of CheckBox)()
            If cb.Checked Then
                checkedItems.Add(cb.Text)
            End If
        Next
        ckb_txt = String.Join(", ", checkedItems.ToArray)
'segue connessione e qury di insert

i dati vengono salvati nel seguente modo ad esempio: nome1, nome2, nome8, nome23
Ora, se io volessi richiamare al click del bottone carica questi dati salvati e far selezionare automaticamente le checkbox corrispondenti ai nomi salvati nella tabella in che modo posso fare?
Spero in un suo aiuto....
 

migo80

Utente Attivo
25 Apr 2013
239
3
18
Ho cercato di risolverlo da me e diciamo che funziona solo in parte cioè cliccando il pulsante mi seleziona solo una checkbox quella corrispondente al primo elemento dell'array splittato posto il codice

Codice:
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        Dim test As String

        Dim connStr2 As String = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=|DataDirectory|\databaseTest.accdb"
        Conn2 = New OleDbConnection(connStr2)



        Dim command2 As OleDbCommand
        Conn2.Open()

        SQLString2 = "Select ckb_select from test_table"
        command2 = New OleDbCommand(SQLString2, Conn2)
        Dim rd As OleDbDataReader = command2.ExecuteReader


        rd.Read()
        test = rd.Item(0).ToString
        Conn2.Close()

        Dim ar As String() = test.Split(New Char() {","c})
        Dim sel_ckb As String

        For Each sel_ckb In ar

            For Each cb As CheckBox In SplitContainer1.Panel1.Controls

                If cb.Text = sel_ckb.ToUpper() Then
                    cb.Checked = True

                End If
            Next
        Next

    End Sub

Perchè il ciclo si ferma al primo elemento? come posso risolvere?
 

Rikk73

Utente Attivo
7 Apr 2015
139
6
18
Arezzo
Credo che il problema sia legato ai due foreach annidati, se ho capito bene ti salvi il nome delle checkbox selezionate e non il loro stato giusto? se così fosse è un approccio a mio avviso sbagliato.
Queste checkbox avranno un significato specifico, e quindi dovresti pensare di dedicare ad ognuna di loro un campo in una tabella che accetti un valore booleano (il checked appunto), poi dovrai fare il binding della UI alla tabella corrispondente.
Studiati un po' il binding dei dati, vedrai che trovi la soluzione che cerchi molto semplice.

Se vuoi seguire questa strada mi permetto di darti un'altro piccolo consiglio, nella tabella dove adesso salvi l'array dei nomi delle checkbox potresti salvare solo l'id che corrisponde alla riga della tabella con i valori delle checkbox
 

migo80

Utente Attivo
25 Apr 2013
239
3
18
Ho risolto in questo modo:
sostituito lo splitcontainer con ChecklistBox e riempendolo con i nomi memorizzati sul db,
e poi nel form load ho modificato il cilco for each che ciclava l'array dei dati prelevati dal db così:
Codice:
        Dim connStr2 As String = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=|DataDirectory|\
databaseTest.accdb"
        Conn2 = New OleDbConnection(connStr2)

        Dim command2 As OleDbCommand
        Conn2.Open()
        SQLString2 = "Select ckb_select from test_table"
        command2 = New OleDbCommand(SQLString2, Conn2)

        Dim rd As OleDbDataReader = command2.ExecuteReader

        rd.Read()
        test = rd.Item(0).ToString
        Conn2.Close()

        ar = test.ToString.Split(",")

        For Each sel_ckb In ar
            For i As Integer = 0 To CheckList1.Items.Count - 1

                If Me.CheckList1.Items(i).ToString.Contains(sel_ckb.ToUpper()) Then
                    MsgBox(Me.CheckList1.Items(i).ToString)

                    Me.CheckList1.SetItemChecked(i, True)
                End If


            Next

        Next
Il tutto funziona perfettamente.
 
  • Like
Reactions: Rikk73
Discussioni simili
Autore Titolo Forum Risposte Data
felino Porting da Visual Basic a C# .NET Framework 3
A [Visual Basic] Frattali in 3 dimensioni Visual Basic 0
StephenSoftware [Visual Basic] Da VB6 a VB.NET Visual Basic 0
D [Visual Basic] [MS Access] query con parametro di testo Visual Basic 4
V [Visual Basic] Richiamare funzione su modulo per restituire list Visual Basic 0
A [Visual Basic] Trasformare stringa in ora Visual Basic 0
B [Visual Basic] Passaggio variabili da un progetto all'altro (Visual Studio 2017 C#/SQL) Visual Basic 0
A [Visual Basic] Consiglio sul datagridview Visual Basic 0
C [Visual Basic] Errore INSERT su DB MySQL (VB.Net) Visual Basic 4
P [Visual Basic] access sql estrarre id vendite x cli e articolo con data maggiore del recordset Visual Basic 2
italo_vb6 [Visual Basic] DirListBox Visual Basic 0
P [Visual Basic] Come riprodurre file avi caricati come risorsa con vb 10 Visual Basic 0
P [Visual Basic] Copiare file piu' grandi di 2 gb in vb6 senza usare filecopy,usando get e put Visual Basic 6
P Riproduzione avi file in una picture box da file .dll .ocx ed altri in visual basic 10 express Offerte e Richieste di Lavoro e/o Collaborazione 0
M [Visual Basic] Creare checkbox dinamicamente in TabControl Visual Basic 1
N [Visual Basic] Dichiarare AxWebBrowser in che versione opera Visual Basic 0
M [Visual Basic] Cercare un file pdf all'interno di una cartella attraverso il valore di una txtbox Visual Basic 1
V [Visual Basic] ottenere info su sistema Visual Basic 1
V [Visual Basic] trovare versione di un .exe con vb6 Visual Basic 0
E connessione db in visual basic 2010 Visual Basic 1
S [Visual Basic] access 2010 click su pagina html Visual Basic 1
T [Visual Basic] Criptazione tramite matrice Visual Basic 0
S [Visual Basic] AIUTO - CERCO GUIDA Visual Basic 0
K [Visual Basic] Stampa e modifica record non funziona più Visual Basic 0
I inserimento data in tabelle da visual basic MySQL 0
L Salve sto per iniziare il Visual Basic Visual Basic 1
Z Conversione codice da visual basic a visual.... .NET Framework 1
maxbossi Regolamento Regolamento forum Visual Basic - leggere con attenzione! Visual Basic 0
C Creare semplice timer in Visual Basic Visual Basic 0
Y Connessione Visual Basic con DataBase Access? MS Access 0
F Visual basic 2010 e excel 2007 .NET Framework 1
C [Visual Basic] Installare un programma con pacchetto di installazione Visual Basic 0
E [Visual basic 2008]Orologio Visual Basic 0
L guida o corso per imparare visual basic Visual Basic 0
G [VISUAL BASIC]caricare dati in un database da una console application Visual Basic 3
R Visual Basic ed Access Visual Basic 1
S Come si "moltiplica" un oggetto in Visual basic 6? Visual Basic 3
C Stampare con visual basic Visual Basic 0
M [Visual Basic] Conversione XLS in PDF, urgente! Programmazione 2
neo996sps [Visual Basic Express] Salvare i dati in un DB Access Programmazione 1
G Ricerca in Visual Basic Visual Basic 1
V Visual Basic Access97 - stampare su file PDF Visual Basic 0
F visual basic Visual Basic 0
T visual basic e mdb remoto Visual Basic 16
M [Visual Basic 6.0]Immagine di un bottone Programmazione 2
R visual basic su pocket pc Visual Basic 1
GENZIANA Manuale Visual Basic in italiano? Visual Basic 2
G Visual basic deallocazione istanza classe Visual Basic 1
G Visual basic deallocazione istanza classe Windows e Software 0
M Visual Basic: come aprire il pannello di controllo Visual Basic 6

Discussioni simili