Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
C# / VB.NET - ComboBox come selezionare un elemento
Forum - C# / VB.NET - ComboBox come selezionare un elemento

Avatar
alip1 (Normal User)
Pro


Messaggi: 129
Iscritto: 12/08/2019

Segnala al moderatore
Postato alle 17:51
Sabato, 19/06/2021
Buon Pomeriggio
Scusatemi non so perchè e non riesco a vedere dove sbaglio sarà la stanchezza.
in un semplice form ho una combobox di tipo DropDownList denominata cboStatoCon. Al load del form chiamo una semplice routine che mi carica i dati da un db tramite un'apposita procedura. Utilizzo la classe TipoStatoCon che ha solo 2 proprietà: IdStato (integer) e TipoStato (string).
Questa la routine con cui popolo la combo
Codice sorgente - presumibilmente VB.NET

  1. Private Sub CaricaStatoCon()
  2.       Dim lStati As List(Of TipoStatoConCS)
  3.  
  4.       lStati = TipoStatoConDBList.GetTipoListOrderByTipoName
  5.       cboStatoCon.DataSource = lStati
  6.       cboStatoCon.DisplayMember = "TipoStato"  ' es.: Rinnovato
  7.       cboStatoCon.ValueMember = "IdStato"        ' es.    3
  8.    End Sub



La combo si popola. Ora in un'altro punto della gestione dei dati faccio questa operazione:

Codice sorgente - presumibilmente C# / VB.NET

  1. cboStatoCon.SelectedValue = Causa.fkStato    ' fkstato é un valore integer  es. 3



fkstato è un valore intero che corrisponde necessariamente ad un valore IDStato che è presente nella combo (quando vado a vedere tutti gli items della combo c'é).  L'istruzione mi dovrebbe in teoria selezionarmi l'item corrispondente al valore, invece non mi seleziona nulla ed in fase di debugging il selectedValue risulta nothing. Non riesco a capire come mai e non riesco a trovare nel web alcuna risposta adeguata. L'istruzione in base ai vari esempi letti dovrebbe essere corretta invece non mi seleziona nulla.
Grazie a quanti vorranno darmi un aiuto.


PM Quote
Avatar
Thejuster (Admin)
Guru^2


Messaggi: 2268
Iscritto: 04/05/2008

Segnala al moderatore
Postato alle 19:26
Sabato, 19/06/2021
Perché nella combo SelectedValue non è utilizzata come proprietà. ma per eventuali estensioni del controllo.

La ComboBox non è altro che una TextBox con implementazione di una ListBox Affiancata.
Quindi come fai in una textbox a recuperare cosa viene mostrato?


valore= CombBox1.Text

viceversa, vuoi mostrare testo sulla combobox

ComboBox1.Text = "blablabla"

Quel SelectedValue molto probabilmente è riferito alla ListBox presente nel Controllo ComboBox


Il titolo del topic invece il titolo ComboBox come selezionare un elemento

Come selezionare un elemento, bhe...
Come detto sopra, Essendo una TextBox con una ListBox, gli item sono classificati come Object.
Quindi non puoi fare una ricerca basata su un ID preciso, ma o sul tipo inserito nella ComboBox

Esempio,
ComboBox1  ha questi Items [ a,b,c,d,e,f,g,h,i,1,2,3,4,5,6,7,8,9,0 ]

posso fare un controllo del tipo cerca "h" nella ComboBox

Codice sorgente - presumibilmente VB.NET

  1. Dim cerca As String = "h"
  2.  
  3.     For Each s In comboBox1.Items
  4.  
  5.         If s = cerca Then
  6.             MessageBox.Show("Trovato!")
  7.         End If
  8.     Next




Nel caso invece, vuoi fare un qualcosa di più complesso, devi organizzare su ID e strutture e liste.

In Modo Attenzione All'evento comboBox1_TextChanged e non comboBox1_SelectedIndexChanged
quando viene cambiato il testo nella TextBox, puoi cercare il valore in una lista ed ottenere il rispettivo ID.

Ultima modifica effettuata da Thejuster il 19/06/2021 alle 19:58


https://mire.forumfree.it/ - Mire Engine
C# UI Designer
PM Quote
Avatar
Carlo (Member)
Guru


Messaggi: 1222
Iscritto: 29/01/2018

Segnala al moderatore
Postato alle 21:54
Sabato, 19/06/2021
per selezionare un item presente in un ComboBox attraverso l'indice:
Codice sorgente - presumibilmente Plain Text

  1. cboStatoCon.SelectedIndex = Causa.fkStato



L'indice è in base zero e quando selezioni devi usare un indice esistente, altrimenti ricevi un errore.

Se invece devi trovare un valore contenuto nel ComboBox, ti ha risposto Thejuster.

Ultima modifica effettuata da Carlo il 20/06/2021 alle 0:16


in programmazione tutto è permesso
PM Quote
Avatar
alip1 (Normal User)
Pro


Messaggi: 129
Iscritto: 12/08/2019

Segnala al moderatore
Postato alle 9:09
Domenica, 20/06/2021
Grazie Carlo sempre gentile e preciso nelle risposte.
Io pensavo che essendo gli items degli oggetti con due proprietà ed utilizzando cboStatoCon.ValueMember = "IdStato"
poi con selectedValue potessi selezionare l'item con l'Id passato.... evidentemente non è così.
Ho risolto con un ciclo opportuno in questo modo:
Codice sorgente - presumibilmente VB.NET

  1. Dim index As Integer, item As TipoStatoConCS
  2.       For index = 0 To cboStatoCon.Items.Count-1
  3.          item = cboStatoCon.Items(index)
  4.          If item.idStato = Causa.fkStato Then
  5.             cboStatoCon.SelectedIndex = index
  6.             Exit For
  7.          End If
  8.  
  9.       Next


Grazie di nuovo:k:

PM Quote
Avatar
nessuno (Normal User)
Guru^2


Messaggi: 6345
Iscritto: 03/01/2010

Segnala al moderatore
Postato alle 13:01
Domenica, 20/06/2021
Testo quotato

Postato originariamente da alip1:

Io pensavo che essendo gli items degli oggetti  ....




Non riesco a capire, non dovresti avere questo problema.

Chiarisci un po', mostra la classe, il codice con cui popoli la lista, se vuoi posta uno zip con parte del codice che non va.

Ultima modifica effettuata da nessuno il 20/06/2021 alle 13:02


Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
---
Il grande studioso italiano Bruno de Finetti (uno dei padri fondatori del moderno Calcolo delle probabilità) chiamava il gioco del Lotto Tassa sulla stupidità.
PM Quote
Avatar
alip1 (Normal User)
Pro


Messaggi: 129
Iscritto: 12/08/2019

Segnala al moderatore
Postato alle 14:47
Giovedì, 24/06/2021
Testo quotato

Postato originariamente da nessuno:

Testo quotato

Postato originariamente da alip1:

Io pensavo che essendo gli items degli oggetti  ....




Non riesco a capire, non dovresti avere questo problema.

Chiarisci un po', mostra la classe, il codice con cui popoli la lista, se vuoi posta uno zip con parte del codice che non va.


Ci provo.
La classe TipoStatoCon ha due semplici proprietà: IdStato e TipoStato
Codice sorgente - presumibilmente VB.NET

  1. Public Class TipoStatoConCS
  2.    '*******
  3.  
  4.    'NOME CLASSE:  TipoStatoCS
  5.    'Autore:  Lipone Antonio, Lip1
  6.    'mail:    alip1@libero.it
  7.    'Data:    16-06-21
  8.    'Descrizione: Classe di gestione
  9.    '             Gestione Record TipoStato in TABELLA TB_TipoStatoCon
  10.    'Revisiooni:  1.0
  11.  
  12.    '**************
  13.    'Dichiarazioni
  14.    '**************
  15.    '*******Paramentri e valori da inserire **********
  16.    Private mlIdStato As Long
  17.    Private mstTipoStatoCon As String
  18.  
  19.    ' Private mblog As Boolean
  20.  
  21.  
  22.    '*****************
  23.    ' Public Property
  24.    '*****************
  25.    Public Property idStato As Long
  26.       Get
  27.          Return mlIdStato
  28.       End Get
  29.       Set(value As Long)
  30.          mlIdStato = value
  31.       End Set
  32.    End Property
  33.    Public Property TipoStato As String
  34.       Get
  35.          Return mstTipoStatoCon
  36.       End Get
  37.       Set(value As String)
  38.          mstTipoStatoCon = value
  39.       End Set
  40.    End Property
  41.  
  42.    Public Sub New()
  43.  
  44.    End Sub
  45. End Class



Con la routine che ho mostrato all'inizio:
Codice sorgente - presumibilmente VB.NET

  1. Private Sub CaricaStatoCon()
  2.       Dim lStati As List(Of TipoStatoConCS)
  3.  
  4.       lStati = TipoStatoConDBList.GetTipoListOrderByTipoName
  5.       cboStatoCon.DataSource = lStati
  6.       cboStatoCon.DisplayMember = "TipoStato"  ' es.: Rinnovato
  7.       cboStatoCon.ValueMember = "IdStato"        ' es.    3
  8.    End Sub



carico una lista: lStati che contiene oggetti del tipo dato; quindi passo la lista alla combobox.
Ora con l'istruzione:
Codice sorgente - presumibilmente C# / VB.NET

  1. cboStatoCon.SelectedValue = Causa.fkStato    ' fkstato é un valore integer  es. 3



pensavo di visualizzare l'elemento con idStato=3. Purtroppo non mi funziona.
Spero di aver chiarito.
Grazie per l'attenzione

PM Quote