Hej Så här kan du göra. Optimmerat koden och lagt den i en funktion: Hej Ditt sätt är det klart snabbast sättet. Tyvärr fungerar bara din lösning om id-numrena är linjära.<br>Sätta focus på en post i en Combobox
Jag loopar igenom två recordset och sätter in resp post på sin "plats"
Med en IF sats kontrollerar jag om RS1("ID") = RS2("ID")
Om det är det så vill jag att den posten ska ha focus när formuläret visas för användaren, hur gör jag det?
Min kod ser ut så här, just nu:
Do Until gst.EOF
frmMain.cmbGroup1.AddItem gst("GrpID") & "-" & gst("GrpName")
If rst("Event_grpid") = gst("GrpID") Then
'MsgBox "WHY?!!" '<== här vill jag sätta focus på den posten.
End If
gst.MoveNext
Loop
Anna-KarinSv: Sätta focus på en post i en Combobox
<code>
'Så här anropar du subrutinen:
LoadCombo frmMain.cmbGroup1, gst, rst("Event_grpid").Value
Sub LoadCombo(Combo as ComboBox, gst as Recordset, Optional GrpID as Long)
Dim fldID as Field
Dim fldName as Field
Set fldID = gst("GrpID")
Set fldName = gst("GrpName")
If GrpID Then
Do Until gst.EOF
Combo.AddItem fldID.Value & "-" & fldName.Value
If fldID = GrpID Then
Combo.ListIndex = Combo.NewIndex
Exit For
End If
gst.MoveNext
Loop
End If
Do Until gst.EOF
Combo.AddItem fldID.Value & "-" & fldName.Value
gst.MoveNext
Loop
End function
</code>Sv: Sätta focus på en post i en Combobox
Tackar för det.
Min lösning vart så här:
frmMain.cmbGroup1.Text = frmMain.cmbGroup1.List(gst("GrpID"))
Den funkar men den är kanske inte optimal.
Hela långa koden i sig ligger i en egen modul som jag anropar för att sköta uppdateringen.
Ska kolla på ditt förslag och se om jag kan få till det, helst skulle jag vilja kunna göra som i ASP att posten får ett Value, men att man visar Gruppnamnet istället.
Anna-KarinSv: Sätta focus på en post i en Combobox
<br>
Du kan slår upp gruppnamnet för att sätta comboboxens textvärde: <br>
SELECT Event.*, Groups.GrpName
FROM Events LEFT JOIN Groups ON Events.Event_grpid = Groups.GrpID
WHERE ...osv<br>
<br>
Nackdelen med att sätta textvärdet är att den inte retunerar rätt listindex. Först när man expanderat listan gör den det. Tills dess retunerar listindex -1.<br>
<br>
Om du vill bind ett värde till dina listposter och GrpID är ett långt heltal, kan du använda ItemData. Annars kan du ange en unik textnyckel för varje item i ImageCombo som tillhär Microsoft Windows Common Controls.<br>
<br>
Generalliserat tidigare funktionen. Oxå fixade en bugg. Ska göra en move next innan Exit Do om den hittar posten. Annars lägger den till markerad post två gånger:
<code>
'Anrop till funktion:
LoadCombo frmMain.cmbGroup1, gst, gst("GrpName"), gst("GrpID"), rst("Event_grpid").Value
'Funktion
Sub LoadCombo(Combo As ComboBox, Recordset As ADODB.Recordset, TextField As ADODB.Field, Optional DataField As ADODB.Field, Optional Default As Variant)
If DataField Is Nothing Then
If Not IsMissing(Default) Then
Do Until Recordset.EOF
Combo.AddItem "" & TextField.Value
If TextField.Value = Default Then
Combo.ListIndex = Combo.NewIndex
Recordset.MoveNext
Exit Do
End If
Recordset.MoveNext
Loop
End If
Do Until Recordset.EOF
Combo.AddItem "" & TextField.Value
Recordset.MoveNext
Loop
Else
If Not IsMissing(Default) Then
Do Until Recordset.EOF
Combo.AddItem "" & TextField.Value
Combo.ItemData(Combo.NewIndex) = DataField.Value
If DataField.Value = Default Then
Combo.ListIndex = Combo.NewIndex
Recordset.MoveNext
Exit Do
End If
Recordset.MoveNext
Loop
End If
Do Until Recordset.EOF
Combo.AddItem "" & TextField.Value
Combo.ItemData(Combo.NewIndex) = DataField.Value
Recordset.MoveNext
Loop
End If
End Sub
</code>