DataGridView höchsten Wert selectieren [ID]

  • VB.NET

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

    DataGridView höchsten Wert selectieren [ID]

    Hey Leute ^^,

    Ich hab eine DataGridView und möchte das die größte ID der DGV selectiert wird bzw die ROW mit der höchsten ID.
    Ich hab schon selber so viel versucht aber nichts funktioniert :pinch:

    Danke :)
    Hi,

    verwendest du eine BindingSource ? Und wird die ID im DGV mit angezeigt ?

    Wenn dein DGV nach der ID sortiert wird, wäre das die letzte Zeile.
    Die könntest du mit

    VB.NET-Quellcode

    1. BindingSource.MoveLast()
    selektieren.

    Ansonsten müstest du das per Schleife machen, HIER mal ein Beispiel, wie du die höchste Zahl findest.

    Mit HoechsteZahl hast du dann den höchsten Wert. Diesen suchst du dann in der BindingSource und markierst diese Zeile mit :

    VB.NET-Quellcode

    1. BindingSource.Position = BindingSource.Find("Name der ID Spalte", HoechsteZahl)


    Was für Daten stehen denn im DGV ? Wenn das aus einer Datenbank kommt, habe ich noch eine andere Möglichkeit.
    Hey :) Danke für deine Antwort :D

    Ja die ID wird in der DGV angezeigt ^^ aber ich hab keine BindingSource drin :o Und ja sie wird nach der ID sortiert ^^

    Das hab ich ja alles schon erledigt aber es muss nunmal die höchste bzw. letzte ID selektiert werden.

    Ich hab aber keine Ahnung wie ich die höchste rauslesen soll :/

    Übrigens kommen alle Daten aus einer SQL Tabelle ^^
    Da arbeitest du scheinbar mit einer AnwendungsArchitektur, die recht schnell an ihre Grenzen kommt, und jetzt beginnen die Workarounds.

    Ich empfehle immer, mit typisierten Datasets zu arbeiten, und SteuerElemente daran zu binden. Auf diese Weise bekommt man Sortieren, Filtern, Editieren, zufügen, löschen, komplexe Views - all das Zeug bekommt man gratis dazu.
    Bei einem an ein Dataset gebundenen DGV wäre dein Problem bereits gelöst: Standardmäßig klickst man da auf einen Spaltenkopf, und dann wird nach der Spalte sortiert. Nochmal draufgeklickst - und die sortierung wird umgedreht, sodaß die höchste ID in der ersten Zeile erscheint - da wird der User sie schon finden ;).
    Woher die Daten kommen ist dem Dataset übrigens unerheblich.

    Aber das ist halt eine Architektur-Entscheidung, und je später man sich drauf einlässt, desto teurer. Üblicherweise wählen die Leuts in dieser Situation den Workaround, weil das kurzfristig billiger ist. Aber halt nur kurzfristig ist das billiger.
    Bei dem was der Erfinder dir gesagt hat, benötigst du die letzte/höchste ID auch gar nicht. Ich schätze mal, dass du im Moment die letzte ID benötigst, damit du beim Eintragen weißt, welche du als nächstest benutzen must ?
    Dies passiert dann auch automatisch, sodass du dich darum gar nicht kümmern must.

    Gruß
    HerrFrie
    Neeeiiin! ^^

    Meine DGV ist mit SQL verbunden, mit ner datenbank. so insert und funktioniert ja. dann will ich die datenbank UPDATEN.

    und beim update nimmt man ja "WHERE ID = " ..

    da schreib ich dann immer where id = me.datagridview_Protokoll.selectedrows(0).cells(0).value.tostring

    So

    deswegen will ich IMMER das die letzte zeile selektiert wird, und das von alleine ohne jeglichen klick auf die DGV, den das muss automatisiert und alleine gehen ^^

    vllt gibt es eine andere möglichkeit die id zu bestimmen..

    habe mir mal sowas vorgestellt

    where id = lastcreatedid oder so xD aber geht nicht...

    gibt es ein befehl indem man "WHERE ID" sagt das er die zuletzt erstellte ID nimmt?

    danke für die antworten :)

    VB.NET-Quellcode

    1. Dim con As SqlConnection
    2. Dim cmd As SqlCommand
    3. Dim strsql As String
    4. strsql = "UPDATE [Mitarbeiterliste] SET "
    5. strsql = strsql & "Mitarbeitervorname = '" & Me.textbox_Mitarbeitername.Text.ToString & "',"
    6. strsql = strsql & "Mitarbeiternachname = '" & Me.textbox_Mitarbeiternachname.Text.ToString & "',"
    7. strsql = strsql & "Mitarbeiterdurchwahl = '" & Me.textbox_Durchwahlnummer.Text.ToString & "'"
    8. strsql = strsql & " where ID = " & Me.datagridview_Mitarbeiterverwaltung.SelectedRows(0).Cells(0).Value.ToString
    wassich sage (in post#4): vermurkste Architektur, und nun die Wörkarounds.

    WenndeLust hast, guggemal "Datenbank in 10 Minuten" auf Movie-Tuts.

    Es gibt garkeinen Grund, die höchste ID auszufischen und upzudaten, weil ein TableAdapter die ganze Tabelle synchronisieren kann - also der merkt selber, welche Datensätze geändert wurden, und weiß, korrekt damit zu verfahren.
    und genau das ist jetzt passier :D xD

    Verdammt gibt es den keine einfache lösung?

    o_o

    hab mir sowas vorgestellt

    " where ID = " & datagridview_Mitarbeiterverwaltung.selectedrows(datagridview_Mitarbeiterverwaltung.rows.count).cells(0).value.ToString <---------------

    gibt es nich sowas in der art >.<? hab schon sovieles probiert =/
    ich wüsst schon was, aber ob das Sinn hat?

    Weil in post#6 willst du iwas updaten, wennss die höchste ID ist.

    Eine höchste ID entsteht zB, wenn AutoIncrement.True eingestellt ist, und im Client ein Datensatz zugefügt wird.

    Ein Update anhand dieser ID wird natürlich fehlschlagen, denn in der DB gibts diese ID ja noch garnet.

    (Also dass du mein Tutorial "zu kompliziert" findest - dieses Gemurkel hingegen nicht...)
    Also ich erklär dir jez ma grob mein Programm

    es ist etwas um anrufe zu "protokollieren"

    d.h ich drück auf einen button, dann werden schon mal die ersten daten in die SQL tabelle geschrieben..

    danach gelangt man in die nächste form, wo man den mitarbeiter aussuchen muss. man muss auf die reihe in der data grid view klicken (FULLROWSELECT ist an) und danach auf den button AUSWÄHLEN

    wenn man auswählen gedrückt hat soll die ausgewählte reihe der datagridview_Mitarbeiterliste in die Tabelle schreiben, deswegen das UPDATE mit selectedrows(0).cells(0).

    aber da man ja gerade erst geinserted hat, ist ja eine neue id schon erstellt worden, und ich auch auf die neueste id updaten, deswegen will ich das die neuste (HÖCHSTE) id ausgewählt wird

    hoffe es ist verständlich ^^'
    für datagridview anpassen: board.gulli.com/thread/488464-…in-einem-array-ermitteln/
    Nimm verschachtelte schleifen:

    - In äusere schleife Index von Col und Wert zwieschen speichern
    - In innere schleife zwieschen gespeichrten wert mit akt. wert vergleichen
    - Die schleifen laufen solange bis MAX Wert gefunden

    Fertig !

    Brauchst keine Datenbanken oder sonstiges....das ist nur spielerei mit schleifen und variablen !
    Du kannst den Wert auch direkt aus der DB holen.

    VB.NET-Quellcode

    1. Conn.Open
    2. CMD.CommandText = "Select @@Identity"
    3. BindingSource.Position = BindingSource.Find("Name der ID Spalte", CMD.ExecuteScalar())
    4. Conn.Close

    Mit 'SELECT @@Identity' holst du dir die beim ersten abspeichern erzeugte ID. Alternativ kannst du auch

    VB.NET-Quellcode

    1. CMD.CommandText = "Select MAX("Name der ID Spalte") FROM Tabellenname"

    benutzen.

    Wenn du eine BindingSource verwendest, kannst du die zuletzt erzeugte Zeile dann wie oben geschrieben auswählen.

    Sinlikez schrieb:

    d.h ich drück auf einen button, dann werden schon mal die ersten daten in die SQL tabelle geschrieben..

    danach gelangt man in die nächste form, wo man den mitarbeiter aussuchen muss.
    ...

    Findich unlogisch.

    Bei mir würdeman gleich ins Form gelangen, auf dem man MA aussucht.
    In die DB würde frühestens erst was geschrieben, wenn man tatsächlich "anrufen" klickst - also wenn man den MA in der Aussuche-Liste nicht findet, und daher niemanden anruft, dann kommt auch nix in die DB. (Cancel-Option).

    Und noch eigentlicher sollteman iwie üprüfen können, ob eine Telefon-Verbindung hergestellt ist, also dass wenn keiner abnimmt, ebenfalls nicht in die DB geschrieben wird, jmd. sei angerufen worden.