Neue Zeile in DataGridView automatisch anwählen

  • VB.NET

Es gibt 9 Antworten in diesem Thema. Der letzte Beitrag () ist von RodFromGermany.

    Neue Zeile in DataGridView automatisch anwählen

    Hallo zusammen,

    ich habe ein kleines Problem mit meiner dgv. Ich möchte, wenn ich eine neue Zeile in der dgv per Button hinzufüge, dass diese automatisch ausgewählt wird.

    Mein Problem ist nun folgender, ich bekomme es zwar hin das die neue Zeile ausgewählt wird, das ist aber nur die halbe Wahrheit, denn der Index ändert sich nicht.

    Beispiel:

    dgv mit 3 Zeilen
    Zeile 2 ist ausgewählt mit dem Index 1
    ich füge eine neue Zeile hin zu
    Zeile 4 wird markiert Index ist aber immer noch 1 ?(

    Ich komme irgendwie nicht weiter oder ich übersehe da etwas, auf jeden fall, hat sich in meinem Kopf bereits eine Endlosschleife gebildet.

    Bitte um Hilfe
    @Maltur Sieh Dir mal die Properety DGV.FirstDisplayedScrollingRowIndex an.
    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!

    Maltur schrieb:

    Index
    Was ist das?
    Mach mal nen ScreenShot und markiere, was nach Einfügen angezeigt werden soll.
    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!
    MultiSelect ist auf True oder False?
    Wenn man mit DeinDGV.Rows.Add() arbeitet, liefert die Funktion den Zeilenindex zurück. Damit kannst Du dann festlegen, dass die neue Zeile (zusätzlich) selektiert werden soll.
    Aber es kommt auch auf den von Dir verwendeten Code zum Hinzufügen von Zeilen an - den Du leider noch nicht gepostet hast.
    Falls Dir es nicht reicht, dass die Zeile zusätzlich selektiert ist, schau mal bei DeinDGV.CurrentCell vorbei, da kannst Du festlegen, welche Zelle den Eingabefocus bekommt.
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    Hallo, hier ist der Code, nicht wundern, es ist beabsichtigt die Daten in die dgv und Struktur zu übertragen.

    VB.NET-Quellcode

    1. Private Sub cmdNotizenNeuerTitel_Click(sender As Object, e As EventArgs) Handles cmdNotizenNeuerTitel.Click
    2. If txtNotizenNeuerTitel.Text <> "" Then
    3. dgvNotizenTitel.Rows.Add(txtNotizenNeuerTitel.Text)
    4. notizliste(nn).notiztitel = txtNotizenNeuerTitel.Text
    5. notizliste(nn).notiztext = ""
    6. dgvNotizenTitel.Rows(nn).Selected = True
    7. txtNotizenNotiz.Text = notizliste(nn).notiztext
    8. nn = nn + 1
    9. txtNotizenNeuerTitel.Clear()
    10. txtNotizenNotiz.ReadOnly = False
    11. txtNotizenNotiz.BackColor = Color.White
    12. cmdNotizenSpeichern.Enabled = True
    13. cmdNotizenBearbeiten.Enabled = False
    14. cmdNotizenNeuerTitel.Enabled = False
    15. If setting(0).autospeichernaktiv = True Then
    16. tmrNotizAutomatischesSpeichern.Start()
    17. End If
    18. TextBox1.Text = dgvNotizenTitel.CurrentRow.Index
    19. End If
    20. End Sub
    Und statt nn nimmst Du einfach den Integerwert, den Dir Zeile#5 gibt (Dim DerIndexDerNeuenZeile = dgvNotizenTitel.Rows.Add(txtNotizenNeuerTitel.Text)). Aber wie ist notizliste überhaupt definiert? Wenn es eine List(Of DeineStruktur) wäre, könntest Du einfach notizliste.Add(NeueInstanzDeinerStruktur) schreiben, anstatt umständlich mit klassenweiten Indices rumzuhantieren. Und wenn Du diese Liste und das DGV miteinander per DataBinding verknüpfst, musst Du Dich noch nicht mal mehr um das DGV-Befüllen kümmern.

    btw: statt

    VB.NET-Quellcode

    1. If txtNotizenNeuerTitel.Text <> "" Then
    2. 'ewig viel Code
    3. End If
    4. End Sub

    bevorzuge ich:

    VB.NET-Quellcode

    1. If txtNotizenNeuerTitel.Text = "" Then Exit Sub 'oder Return
    2. 'ewig viel Code
    3. End Sub

    Verringert die Verschachtelungstiefe um 1.

    Und: If setting(0).autospeichernaktiv = True Then -> If setting(0).autospeichernaktiv Then
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.

    ErfinderDesRades schrieb:

    VB.NET-Quellcode

    1. TextBox1.Text = dgvNotizenTitel.CurrentRow.Index

    @Maltur Option Strict On
    Visual Studio - Empfohlene Einstellungen
    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!