Index einer ComboBox an BindingNavigator übergeben

  • VB.NET

Es gibt 12 Antworten in diesem Thema. Der letzte Beitrag () ist von ErfinderDesRades.

    Index einer ComboBox an BindingNavigator übergeben

    Hallo!

    Is es möglich (ich denk schon) den Index einer Combobox an einen BindingNavigator zu übergeben, so, dass er den bekommenden Index auch navigiert?
    Also so, dass ich in der cbo den Index 1 habe, ihn an bn übergebe und dieser mir in einem DataGridView dann die 2. Zeile zur aktiven Zeile macht.

    puh..., is das noch verständlich? ich hoff es mal.
    Gruß & ...
    Lächle heut, morgen wird's schlimmer !!!

    Buch lesen | Bitte VB Tags benutzen - was ist damit gemeint? |

    VB.NET-Quellcode

    1. Dim index As Integer = ComboBox1.SelectedIndex
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Hi RFG!
    Jo, das ich den index aus einer Combo bekomme hätte ich mitteilen sollen - mein Fehler.

    Wie bekomme ich den index nun an den Navigator? & auch so, dass er bei Übergabe zum entsprechenden Element (index) navigiert?
    Gruß & ...
    Lächle heut, morgen wird's schlimmer !!!

    Buch lesen | Bitte VB Tags benutzen - was ist damit gemeint? |
    Wie bindest Du denn den BindingNavigator ein?
    (Poste mal ein paar Zeilen Code).
    -------------------------------------------

    VB.NET-Quellcode

    1. Private Sub ComboBox1_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ComboBox1.SelectedIndexChanged
    2. BindingNavigator1.Items("BindingNavigatorPositionItem").Text = ComboBox1.SelectedIndex.ToString ' ComboBox1.Text
    3. End Sub
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „RodFromGermany“ ()

    Also:

    In meiner StartForm befindet sich die ComboBox, die aus einer Liste heraus gefüllt wird.
    In der StartForm wird in TextBoxen die Daten zum ausgewählten Objekt in der ComboBox angezeigt.

    Nun kann ich mir eine Form per Button öffnen in dem sich ein DataGridView & ein BindingNavigator befindet (zusammen geklickt).
    Ist die DGV-Form nun geöffnet soll gemäß dem Index der ComboBox die entsprechende Zeile im DGV ausgewählt sein - sprich der kleine niedliche Pfeil (DatensatzMarkierer) soll sich mit bewegen ;). Dies möchte ich über den BindingNavigator realisieren. Er bekommt den Index (keinen Text, denn den kenn ich ja nicht immer) von der ComboBox & navigiert zur entsprechenden Zeile und markiert diese (das übernimmt der BindingNavigator eh schon).

    @RFG: Code brauch ich nicht schicken... die cbo feuert das Event bei SelectedValueChanged, jetzt wird eine Sub in der DGV-Form aufgerufen, die genau das gewünschte machen soll.

    Mein Versuch:

    VB.NET-Quellcode

    1. BindingNavigator.Items.Item(StartForm.ComboBox.SelectedIndex)

    Die Fehlermeldung:
    Eigenschaftenzugriff muss der Eigenschaft zugewiesen werden oder deren Wert verwenden.

    Aber .Item() erfordert einen index As Integer & das ist doch SelectedIndex ??? ?(

    So, nun ...
    Gruß & ...
    Lächle heut, morgen wird's schlimmer !!!

    Buch lesen | Bitte VB Tags benutzen - was ist damit gemeint? |
    Och........... BITTE lesen

    .Item() zu BindingNavigator.Items.Item() erfordert einen index als Integer & ComboBox.SelectedIndex liefert doch einen.

    Wo ist da mein Denkfehler ???
    Gruß & ...
    Lächle heut, morgen wird's schlimmer !!!

    Buch lesen | Bitte VB Tags benutzen - was ist damit gemeint? |
    Mach es doch einfach so, ohne Bindungsnavigator:

    VB.NET-Quellcode

    1. Private Sub ComboBox1_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ComboBox1.SelectedIndexChanged
    2. For i As Integer = 0 To DataGridView1.Rows.Count - 1
    3. DataGridView1.Rows(i).Selected = False
    4. Next
    5. DataGridView1.Rows(ComboBox1.SelectedIndex).Selected = True
    6. End Sub
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    :)
    Jo, genau so hab ich es schon gelöst! NUR tritt hier das Problem auf, dass der DatensatzMarkierer nicht mitläuft ...
    Das markieren funktioniert so - richtig. Aber es bleibt ein anderer Datensatz "aktiv" & komme ich jetzt auf diesen zurück, wird dieser nicht markiert und wechselt sofort in den Ändermodus der Zelle.
    Wenn ich natürlich über den DatansatzMarkierer navigiere, dann geht es.


    SORRY, den Code hätte ich sehr wohl mal posten können

    Noch etwas:
    Beim Klicken im DataGridView fiel dann auf, dass sich der BindingNavigator auch aktualisiert & daher die Idee ihn anzusprechen.
    Gruß & ...
    Lächle heut, morgen wird's schlimmer !!!

    Buch lesen | Bitte VB Tags benutzen - was ist damit gemeint? |

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „dolce“ ()

    BindingNavigator ist ein völlig unnötiges und benutzerfeindliches Controls. Wozu sollte jemand im BN sich durch jeden Datensatz klicksen, wenn man ebensogut das gleichfalls angebundene DGV durchscrollen kann und auswählen?
    Scrollen und wählen ist doch vielfach praktischer, weil man die anzuwählenden Daten bereits sieht, bevor man sie anwählt.
    Du weist, wie man ein DGV per DataSource an eine Datenquelle bindet?
    gem. LehrBuch/-Heft so:

    VB.NET-Quellcode

    1. Private bs As New BindingSource
    2. Private Sub frmDataGridView_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    3. bs.DataSource = DieZaehlerListe.dieZaehler //dieZaehler = ArrayList
    4. Me.dgv.AutoGenerateColumns = False
    5. Me.dgv.DataSource = bs
    6. Me.BindingNavigatorMeinDGV.BindingSource = bs
    7. Dim c As New DataGridViewTextBoxCell
    8. c.Style.BackColor = Color.Aquamarine
    9. Dim dc As New DataGridViewColumn
    10. dc.Name = "ZaehlerName"
    11. dc.HeaderText = "ZaehlerName"
    12. dc.DataPropertyName = "ZaehlerName"
    13. dc.CellTemplate = c
    14. Me.dgv.Columns.Add(dc)
    15. dc = New DataGridViewColumn
    16. dc.Name = "ZaehlerNummer"
    17. dc.HeaderText = "ZaehlerNummer"
    18. dc.DataPropertyName = "ZaehlerNummer"
    19. dc.CellTemplate = c
    20. Me.dgv.Columns.Add(dc)
    21. dc = New DataGridViewColumn
    22. dc.Name = "ZaehlerStand"
    23. dc.HeaderText = "ZaehlerStand"
    24. dc.DataPropertyName = "ZaehlerStandEinbau"
    25. c.Style.Alignment = DataGridViewContentAlignment.MiddleRight
    26. dc.CellTemplate = c
    27. Me.dgv.Columns.Add(dc)
    28. End Sub


    Und wie zum Geier bewerkstellige ich nun, das mein DatansatzMarkierer "mitwandert", sprich den DS auch aktiviert; denn dann sollte er ja auch markiert werden!?


    Trotz alle dem vielen Dank für die bisherigen Gedanken und Ergüsse!
    Gruß & ...
    Lächle heut, morgen wird's schlimmer !!!

    Buch lesen | Bitte VB Tags benutzen - was ist damit gemeint? |
    Hi!

    Auf Grund des Hinweises von EDR habe ich mir meine BindingSource noch einmal angeschaut und habe folgende funktionierende Lösung gefunden:

    VB.NET-Quellcode

    1. BindingSource.Position = Form.ComboBox.SelectedIndex


    Nun funktioniert es so, wie ich es möchte - ohne jegliche erkennbare Fehler!
    Aller besten Danke für die Denkanstöße :thumbsup: :!:
    Gruß & ...
    Lächle heut, morgen wird's schlimmer !!!

    Buch lesen | Bitte VB Tags benutzen - was ist damit gemeint? |