Benutzer mit den meisten Antworten
[VB.NET 2005] An Textbox gebundenes Datenbankfeld auslesen?

Frage
-
Tag zusammen,
ich versuche zur Zeit, einen Datenfilter für das Kontextmenü zu entwickeln. Allerdings habe ich damit Probleme, das Datenbankfeld der aktiven TextBox zu ermitteln.
Ich verwende eine SQL-Datenbank, BindingSource, TableAdapter und haben die Datenbankverknüpfungen grafisch über die Eigenschaften erstellt. Nun versuche ich über Me.ActiveControl an die Datenbindung der Textbox zu kommen, leider erfolglos. Gibt es eine Möglichkeit über die Datenverknüpfte TextBox an das Tabellenfeld zukommen dessen Werte des anzeigt?
Philipp
Antworten
-
Hallo Elmar,
ganz konnte ich dir leider nicht folgen, aber ich konnte deinem Bsp. mein Gesuch entnehmen:
SpaltenName = Me.ActiveControl.DataBindings("Text").BindingMemberInfo.BindingField
Nun kann ich über das Kontextmenü jeweils per rechtsklick auf ein Textfeld den bindingsource.filter direkt setzen.
Danke
Gruß
Philipp
- Als Antwort markiert Zidane1x Dienstag, 26. Oktober 2010 07:54
Alle Antworten
-
Hallo Philipp,
Anstatt über ActiveControl geht es direkt in der Ereignisbehandlung über die SourceControl-Eigenschaft
Über die DataBindings erhälst Du die jeweilige Binding Instanz, mit der man dann weiter operieren kann.Der Code könnte dann ansatzweise so aussehen, hier fürs Opening Ereignis:
Private Sub textContextMenuStrip_Opening(ByVal sender As System.Object, ByVal e As System.ComponentModel.CancelEventArgs) _ Handles textContextMenuStrip.Opening ' Das ContextMenuStrip Dim contextStrip = DirectCast(sender, ContextMenuStrip) ' Das aufrufende Steuerlement Dim sourceControl = contextStrip.SourceControl ' Die Datenbindung für die Text-Eigenschaft (Textbox u.a.) Dim textBinding = sourceControl.DataBindings("Text") ' Gebundene Spalte in der Datenquelle Dim bindingField = textBinding.BindingMemberInfo.BindingField ' Angenommen: Gebunden ist an eine DataView via BindingSource Dim bindingSource = DirectCast(textBinding.DataSource, BindingSource) Dim currencyManager = DirectCast(textBinding.BindingManagerBase, CurrencyManager) Dim currentRow = DirectCast(currencyManager.Current, DataRowView) ' Anzeige Spalte = Wert im 1. Kontextmenü-Element contextStrip.Items(0).Text = String.Format("{0} = {1} Zeile {2}", _ bindingField, currentRow(bindingField), bindingSource.Position) End Sub E
Angenommen habe ich ein ContextMenuStrip mit einem (Element.
Die gebundene Spalte habe ich über BindingMemberInfo.BindingField ermittelt
und zeige den aktuellen Wert und die Position (in der Liste) an.Ob Du mit BindingSource und/oder CurrencyManager arbeitest, ist Geschmackssache.
Willst Du weitere Befehle binden, wie z. B. MoveXXX eignet sich die BindingSource besser.
-
Hallo Elmar,
ganz konnte ich dir leider nicht folgen, aber ich konnte deinem Bsp. mein Gesuch entnehmen:
SpaltenName = Me.ActiveControl.DataBindings("Text").BindingMemberInfo.BindingField
Nun kann ich über das Kontextmenü jeweils per rechtsklick auf ein Textfeld den bindingsource.filter direkt setzen.
Danke
Gruß
Philipp
- Als Antwort markiert Zidane1x Dienstag, 26. Oktober 2010 07:54
-
Hallo Philipp,
schön, das Du wenigstens etwas von meinem zusammengestöpselten Code gebrauchen konntest.
Da Du nicht konkreter darauf eingegangen bist, was Du in Deinem Kontextmenü
so alles machen willst, ist das Beispiel sehr allgemein ausgefallen.Gruß Elmar