Oppure

Loading
19/06/21 15:51
alip1
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
  Private Sub CaricaStatoCon()
      Dim lStati As List(Of TipoStatoConCS)

      lStati = TipoStatoConDBList.GetTipoListOrderByTipoName
      cboStatoCon.DataSource = lStati
      cboStatoCon.DisplayMember = "TipoStato"  ' es.: Rinnovato
      cboStatoCon.ValueMember = "IdStato"        ' es.    3
   End Sub


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

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.

aaa
19/06/21 17:26
Thejuster
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


    Dim cerca As String = "h"

    For Each s In comboBox1.Items

        If s = cerca Then
            MessageBox.Show("Trovato!")
        End If
    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 19/06/21 17:58
mire.forumfree.it/ - Mire Engine
C# UI Designer
19/06/21 19:54
Carlo
per selezionare un item presente in un ComboBox attraverso l'indice:
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 19/06/21 22:16
in programmazione tutto è permesso
20/06/21 7:09
alip1
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:
 Dim index As Integer, item As TipoStatoConCS
      For index = 0 To cboStatoCon.Items.Count-1
         item = cboStatoCon.Items(index)
         If item.idStato = Causa.fkStato Then
            cboStatoCon.SelectedIndex = index
            Exit For
         End If

      Next

Grazie di nuovo:k:
aaa
20/06/21 11:01
nessuno
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 20/06/21 11: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à.
24/06/21 12:47
alip1
Postato originariamente da nessuno:

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
Public Class TipoStatoConCS
   '*******

   'NOME CLASSE:  TipoStatoCS
   'Autore:  Lipone Antonio, Lip1
   'mail:    alip1@libero.it
   'Data:    16-06-21
   'Descrizione: Classe di gestione
   '             Gestione Record TipoStato in TABELLA TB_TipoStatoCon
   'Revisiooni:  1.0

   '**************
   'Dichiarazioni
   '**************
   '*******Paramentri e valori da inserire **********
   Private mlIdStato As Long
   Private mstTipoStatoCon As String

   ' Private mblog As Boolean


   '*****************
   ' Public Property 
   '*****************
   Public Property idStato As Long
      Get
         Return mlIdStato
      End Get
      Set(value As Long)
         mlIdStato = value
      End Set
   End Property
   Public Property TipoStato As String
      Get
         Return mstTipoStatoCon
      End Get
      Set(value As String)
         mstTipoStatoCon = value
      End Set
   End Property

   Public Sub New()

   End Sub
End Class


Con la routine che ho mostrato all'inizio:
Private Sub CaricaStatoCon()
      Dim lStati As List(Of TipoStatoConCS)
 
      lStati = TipoStatoConDBList.GetTipoListOrderByTipoName
      cboStatoCon.DataSource = lStati
      cboStatoCon.DisplayMember = "TipoStato"  ' es.: Rinnovato
      cboStatoCon.ValueMember = "IdStato"        ' es.    3
   End Sub


carico una lista: lStati che contiene oggetti del tipo dato; quindi passo la lista alla combobox.
Ora con l'istruzione:
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
aaa