Hej. 1. Skapa en Userkontroll Hej. Jag är inte säker riktigt på hur det fungerar. Har inte jobbat så mycket med databundna kontroller. Men du kan lösa det genom att lägga till en BindingCollection. Tror inte det är enda sättet. Finns ju möjlighet att ange DataBindingBehavior egenskap för en UserControl.<br> Inte för att jag riktigt fattar vad den gör, men...User Control med databas koppling
Jag försöker att skapa en user control med en textbox i och kunna
koppla denna till ett recodset precis på samma sätt som en vanlig
textbox.
Hur ska jag göra så att "DataSource" hamnar som property i det
formulär som jag sen placerar min control ?
Jag har lyckats med att få tex "Text" och andra vanliga datatyper
att fungera.
Lite exempel på hur jag har gjort i user controlen med det som fungerar :
Public Property Get Text() As String
Text = txtDate.Text
End Property
Public Property Let Text(ByVal c As String)
txtDate.Text = c
End Property
Och här är det som inte fungerar :
Public Property Get DataSource() As Adodc
DataSource = txtDate.DataSource
End Property
Public Property Let DataSource(ByVal c As Adodc)
Set txtDate.DataSource = c
End Property
Istället för adodc har jag även provat med ADODB.Connection
och ADODB.Recordset mm....
Behövs /ska man ha Get metoden för datasource ?
Jag har provat utan, men det gör ingen skilnad.
Tacksam för hjälp.
/UffeSv: User Control med databas koppling
2. Lägg till en textkontroll
3. Klistra in följande kod i kontrollen:
Public Property Let Text(Value As String)
Text1.Text = Value
End Property
Public Property Get Text() As String
Text = Text1.Text
End Property
Private Sub Text1_Change()
PropertyChanged "Text"
End Sub
Private Sub UserControl_ReadProperties(PropBag As PropertyBag)
Text1.Text = PropBag.ReadProperty("Text")
End Sub
Private Sub UserControl_Resize()
Text1.Move ScaleLeft, ScaleTop, ScaleWidth, ScaleHeight
End Sub
Private Sub UserControl_WriteProperties(PropBag As PropertyBag)
PropBag.WriteProperty "Text", Text1.Text
End Sub
4. Öppna "Procedure Attributes" från tools menyn.
5. Klicka på knappen "Advanced>>"
6. Ändra "Procedure ID:" till "(Default)"
7. Kryssa i "Property is data bound", "This property binds to DataField" och "Show in DataBindings collection at design time" under rubriken "Data Binding"
Klart.
Tänk på att du bara kan binda den mot en ADO datakälla.Sv: User Control med databas koppling
Detta fungerar utmärk, tackar, när jag kopplar kontrollen till en ADODC
källa som finns i det formulär som jag placerat kontrollen.
Men, om jag försöker att koppla kontrollen till en datakälla med kod
så fungerar det inte.
På raden med, Set dmbAnstFrom.DataSource = rsPersonal,
får man felmeddelandet :
"Compiler error : Method or data member not found"
Varför ?
Är inte ett ADODB.Recordset en ADO datakälla ?
Man kan ju få upp en lista med de attribut och metoder som finns för ett visst object och DataSource finns.
Min kod ser ut som följande :
Private rsPersonal As ADODB.Recordset
Set rsPersonal = New ADODB.Recordset
rsPersonal.Open sSql, conn, adOpenStatic, adLockPessimistic
' Min User Control, som inte fungerar
Set dmbAnstFrom.DataSource = rsPersonal
dmbAnstFrom.DataField = "anst_from"
' Bland annat funger detta
Set txtForNamn.DataSource = rsPersonal
txtForNamn.DataField = "for_namn"
Fattar inte skillnaden.
/UffeSv: User Control med databas koppling
<br>
Så här gör du om du vill lösa det med BindingCollection.
<code>
Private rsPersonal As ADODB.Recordset
Private mBindingCollection As BindingCollection
Private Sub Form_Load()
Set rsPersonal = New ADODB.Recordset
rsPersonal.Open sSql, conn, adOpenStatic, adLockPessimistic
Set mBindingCollection = New BindingCollection
Set mBindingCollection.DataSource = rsPersonal
mBindingCollection.Add dmbAnstFrom, "Text", "anst_from"
End Sub
</code>
<br>
Någon som är insatt i ämnet?<br>Sv: User Control med databas koppling
Tusen miljoners tack.
Det funkar utmärkt.
/Uffe