Private Sub (Name As String) als If Bedingung

  • VB.NET
  • .NET 4.5

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

    Private Sub (Name As String) als If Bedingung

    Hallo, ich möchte folgendes als If Bedingung schreiben, weiß aber nicht so recht wie:
    Wenn

    VB.NET-Quellcode

    1. Private Sub btnAdd_Click_ (sender As Object, e As EventArgs) Handles btnAdd.Click
    angeklickt wird soll folgendes passieren:

    VB.NET-Quellcode

    1. '(AddDirectory wurde als Insert Into zugewiesen)
    2. 'Der Text der Textbox wird in die DataGridView hinzugefügt
    3. AddDirectory(txtAddDirectoryDesignation.Text)
    4. 'Sobald der btnAdd geklickt wird, überträgt er den Text in die Tabelle
    5. 'und der übertragene Text soll direkt selektiert werden.
    6. dgvDirectoryDesignation.CurrentCell.Selected

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

    Ich sehe in dem was du beschreibst keine Bedingung, lediglich eine Reaktion auf ein Event.

    Könntest du uns bitte einmal, komplett ohne Code, schildern was du vor hast?
    Post-AGB:
    §1 Mit dem Lesen dieses Posts stimmst du den AGB unverzüglich zu
    §2 Ein Widerruf muss innerhalb von 3 Sekunden nach Lesen des Hauptbestandteil des ersten jemals gelesenen Posts erfolgen
    Abs.1 Die Signatur zählt nicht zum Hauptbestandteil des Posts
    §3 Ein erfolgreicher Widerruf zwingt zu einem Besuch bei einem Hypnotiseur oder Neurochirurg, sodass der gelesene Text aus den Erinnerungen entfernt werden kann
    Abs.1 Die Kosten und Risiken sind jeweils selbst zu tragen
    ​Ich sehe in dem was du beschreibst keine Bedingung, lediglich eine Reaktion auf ein Event.

    Du hast recht, ist mir auch gerade aufgefallen das es keine Bedingung ist.
    Sobald der Text der Textbox in die DataGridView per Button hinzugefügt wird, soll die eingefügte Zeile direkt selektiert werden.

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

    Nur ganz kurz, den Code der AddPath-Sub findet man im verlinkten Thread.
    Eine Möglichkeit wäre, dass Du das DGV durchgehst und die passende Zelle suchst und bei Auffinden enenjene Zelle/Zeile selektierst:

    VB.NET-Quellcode

    1. For Each Row As DataGridViewRow In dgvDirectoryDesignation.Rows
    2. If Row.Cells(0).Value.ToString = txtAddDirectoryDesignation.Text Then dgvDirectoryDesignation.CurrentCell = Row.Cells(0)
    3. Next
    falls in Spalte 1 der Text drinsteht. Ansonsten Spaltenindex anpassen. Bei SQL-Code bin ich raus. Geht bestimmt noch effizienter, wüsste aber dann SQL-bedingt nicht wie.
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Häufig von mir verwendete Abkürzungen: CEs = control elements (Labels, Buttons, DGVs, ...) und tDS (typisiertes DataSet)
    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht in den Spekulatiusmodus gehen.

    adnanche schrieb:

    Er springt nicht in die neue oder bearbeitete Zeile
    dafür musst Du den Code noch ergänzen. Aber das hatte ich ja auch schon in dem anderen Thread vorgeschlagen. Scheint aber bei Dir auch nicht zu funktionieren:

    VB.NET-Quellcode

    1. For Each Row As DataGridViewRow In dgvDirectoryDesignation.Rows
    2. If Row.Cells(0).Value.ToString = txtAddDirectoryDesignation.Text Then
    3. dgvDirectoryDesignation.CurrentCell = Row.Cells(0)
    4. dgvDirectoryDesignation.CurrentCell.Selected = True
    5. dgvDirectoryDesignation.FirstDisplayedCell = Row.Cells(0)
    6. End If
    7. Next
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Häufig von mir verwendete Abkürzungen: CEs = control elements (Labels, Buttons, DGVs, ...) und tDS (typisiertes DataSet)
    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht in den Spekulatiusmodus gehen.
    Danke dir für die Hilfe.
    Habe jetzt doch eine andere Lösung gefunden:
    zum hinzufügen:

    VB.NET-Quellcode

    1. dgvDirectoryDesignation.DataSource = dgvDirectoryDesignationList()
    2. dgvDirectoryDesignation.Rows(dgvDirectoryDesignation.Rows.Count - 1).Selected = True

    zum editieren:

    VB.NET-Quellcode

    1. Dim currentIndex As Integer = dgvDirectoryDesignation.SelectedRows(0).Index
    2. dgvDirectoryDesignation.DataSource = dgvDirectoryDesignationList()
    3. dgvDirectoryDesignation.Rows(currentIndex).Selected = True

    adnanche schrieb:

    Sobald der Text der Textbox in die DataGridView per Button hinzugefügt wird, soll die eingefügte Zeile direkt selektiert werden.
    Solch fackelt man eiglich ober die BindingSource.AddNew()-Methode ab.
    Also schon die Idee "...der Text der Textbox in die DataGridView per Button hinzugefügt wird..." läuft in die falsche Richtung - einem datengebundenem DGV fügt man keine Zeile hinzu.
    Die Zeile fügt man seiner DataSource hinzu - wenn du an BindingSources binden tätest dann der BindingSource.

    Also wenns hier tatsächlich um Zeilen geht. Inne Anforderung steht ja, dass Text hinzugefügt werden solle, dassis widersprüchlich, denn einem DGV kann man nur Zeilen hinzufügen - Text nicht.
    Text kann man nicht hinzufügen, sondern allenfalls in eine bereits bestehende Zelle einfügen - das wäre wieder was anderes.

    Dieser Beitrag wurde bereits 4 mal editiert, zuletzt von „ErfinderDesRades“ ()

    Tut mir leid, dann habe ich mich falsch ausgedrückt. Ich füge erst eine Zeile in der DGV hinzu mittels einer Datenbankabfrage und anschließend füge ich in diese Zeile einen Text hinzu.
    Ich stehe jetzt vor einem weiteren Problem. Ich möchte sobald der Text Editiert wird FirstDisplayedScrollingRowIndex nutzen, um die bearbeitete Zeile in den Vordergrund zu rücken sobald die Tabelle neu lädt.

    Vollzitat entfernt. ~Thunderbolt

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

    adnanche schrieb:

    Ich füge erst eine Zeile in der DGV hinzu mittels einer Datenbankabfrage
    Dassis aber sehr ungewöhnlich.
    In meiner Welt befüllt man eine DataTable aus der Datenbank.
    Also für eine Zeile öffnet man eh keine Connection.
    Und was aus der Db kommt, wird nicht dem DGV zugefügt, sondern befüllt wie gesagt die DataTable.

    Und wenn der User was zufügen will, dann wird eben was zugefügt (BindingSource.AddNew) - eine Db-Abfrage hat in dem Zusammenhang keinen Sinn.

    Erst beim Speichern des Datasets, wo die DataTable drin ist, werden Commands gegen die Db abgefahren - aber natürlich nicht vorm Hinzufügen, sondern danach.