Προς το περιεχόμενο

Πρόβλημα ComboBox (visual Basic)


lepass_7

Προτεινόμενες αναρτήσεις

Δημοσ.

Γεια σας παιδια,

Εχω ενα πρόβλημα με ένα combobox το οποίο είναι συνδεδέμενο με μια βάση δεδομένων και δείχνει τα επίθετα των records μου. Θέλω όταν πατάω σε ένα συγκεκρίμενο επίθετο να μου εμφανίζει σε ένα textbox το όνομα της συγκεκριμένης καταχώρησης.

Αυτό που σκέφτηκα μέχρι στιγμής(αλλα δεν μπορώ να το υλοποιήσω, διότι δεν ξέρω καλά SQL) είναι: Πατώντας ένα συγκεκριμένο επίθετο πάιρνω τον αριθμό(αυτός ο αριθμός είναι η σειρά που βρίσκεται το επίθετο στην βάση μου) από το combobox και στην συνέχεια να βάλω το text box να πάρει ως τιμή το όνομα που βρίσκεται στην στηλη namecus(έτσι ονόμασα την στήλη με τα ονόματα στην βάση μου) και στην σειρά με τον αριθμό που έχω.

Ποιο κάτω δίνω τον κώδικα που έχω φτιάξει για αυτό το κομμάτι μέχρι στιγμής:

 

Private Sub cboCustomers_Click()

Dim x As Integer

Dim k As String

 

x = cboCustomers.ListIndex

k = customerADO.Recordset(x)!namecus '-->Κατα την

' απασφαλμάτωση παίρνω μήνυμα λάθους εδώ

 

txtName.Text = k

cboCustomers.Refresh

 

End Sub

 

Έχει κάποιος καποια ιδέα;

Δημοσ.

Αν και δεν ασχολούμαι με VB μήπως σου λείπει η σύνδεση με την βάση δεδομένων;

Επίσης "controlname".SelectedValue είναι αυτό που θες από το control. Και ρίξε και ένα CType σε αυτό για να είσαι σίγουρος ότι θα σου βγει int και όχι string.

Δημοσ.

Δεν υπάρχει πρόβλημα με την βάση, το combobox διάβαζει από την βάση δεδομένα από την στήλη surname, δηλάδη μου εμφανίζει τα επίθετα.

Δεν καταλαβα ακριβως τι εννοεις να κάνω...

Δημοσ.

To combo πέρνει 2 τιμές αν το έχεις ρυθμίσει κανονικά.

Value και Name. Value είναι αυτό που σου επιστρέφει όταν το επιλέξεις, Name αυτό που εμφανίζει.

 

"comboboxname".SelectedValue είναι η τιμή Value του combo που είναι integer όπως έγραψες παραπάνω. Το combo όμως επιστρέφει string. Για καλό και για κακό, κάνεις cast την επιστρεφόμενη τιμή σε integer και έχεις αυτό που θέλεις για να ψάξεις στην βάση δεδομένων.

Επίσης είδα μερικά λάθη

α) Η Sub μάλλον είναι λάθος. Μήπως χρειάζεσαι την SelectedValueChanged αντί τις Click?

β) Το combobox δεν έχει property .listindex

Δημοσ.

Ευχαριστω που απάντησες τόσο γρήγορα.

Αλλά στην Visual Basic το combobox έχει property την listinex έτσι όπως το έγραψα δίνει στην μεταβλητή Χ ένα αριθμό integer, δηλαδή αν έχω 10 επαφές μέσα στο combobox και επιλέξω την πρώτη τότε η Χ παίρνει την τιμή 0 και αν επιλέξω την τελευταία παίρνει την τιμή 9. Ο λόγος που επέλεξα το event click() ειναι διότι θέλω να μου εμφανίζει το αποτέλεσμα που θέλω όταν πατάω στο συγκεκριμένο.

Δεν ξέρω αν κατάλαβες ακριβώς τι θέλω να κάνω, βασικά με αυτό το κώδικα καταφέρνω να πάρω ανάλογα με την επιλογή μου την γραμμή( με τον ακέραιο Χ) οπού βρισκεται η συγκεκριμένη καταχώρηση στον πίνακα της βάσης μου.

Δημοσ.

Κάπου έχεις μπερδευτεί μάλλον.

Το event click είναι για όταν κάνεις κλικ στο control. Στην περίπτωση του combo το event click ανοίγει το μενού των επιλογών και δεν επιλέγει ακόμα τιμή από το μενού. Αυτό είναι σε δεύτερο κλικ και φυσικά έχει ήδη τρέξει το event (γι αυτό και πέρνεις και λάθος).

Το event που θες είναι το SelectedValueChanged. Από Null στην αρχή πέρνει τιμή αυτή που θα πατήσεις την πρώτη φορά και εκτελείτε κάθε φορά που το τρέχεις. (Βάλε και μια γραμμή στην αρχή που να λέει --Please Select -- ως προεπιλογή).

 

Επίσης παρατήρισα ότι αναφέρεσαι στην VB6, μιάς και μου ήταν περίεργο πως έχεις ListIndex property σε combo. Αυτό έχει φύγει με την έλευση της .ΝΕΤ εδώ και κάτι αιώνες. (Χρησιμοποιούν SelectedIndex και αυτό είναι μόνο αν έχεις καμμιά Case Select στον κώδικα ή θες να κάνεις υπολογισμούς, διαφορετικά Value για να δουλεύει με βάσεις).

 

Θα σε συμβούλευα να κάνεις τα εξής.

α) Value στο combo να βάλεις τη στήλη που έχει το κλειδί των εγγραφών του πίνακα. (ID κλπ)

β) Χρησιμοποίησε το .SelectedValue για να κάνεις το ψάξιμο μέσα στην SQL και όχι το ListIndex.

γ) Πέτα την VB6 και πιάσε την VB.NET 2008 μπας και δεις φως. (Άντε VB.NET 2005). :-D

Δημοσ.

Ναι το προβλημα μου ειναι στην SQL επειδη ελάχιστα ξέρω από SQL δεν μπορώ να κάνω ψάξιμο... αν μπορείς να με βοηθήσεις σε αυτό καλώς αλλιώς ευχαριστώ για τα υπόλοιπα!

Αρχειοθετημένο

Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.

  • Δημιουργία νέου...