.CellValidating in falscher Spalte

  • VB.NET

Es gibt 4 Antworten in diesem Thema. Der letzte Beitrag () ist von GünterD.

    .CellValidating in falscher Spalte

    Moin Moin,

    ich habe ein Problem mit .CellValidating in einem DGV,

    Folgende Situation
    - in einem DGV wird nur eine Spalte angezeigt, die der User manuell füllen soll
    - alle anderen Spalten werden standardmäßig mit

    VB.NET-Quellcode

    1. Private Sub Tbl_Firewall_iDMCbindingsource_AddingNew(ByVal sender As Object, ByVal e As AddingNewEventArgs) Handles Tbl_Firewall_iDMCBindingSource.AddingNew
    2. _SPS_DBDataSet.tbl_Firewall_iDMC.gültigAbColumn.DefaultValue = DateTime.Now
    3. _SPS_DBDataSet.tbl_Firewall_iDMC.GefundenColumn.DefaultValue = 0
    4. _SPS_DBDataSet.tbl_Firewall_iDMC.AktivColumn.DefaultValue = 1
    5. _SPS_DBDataSet.tbl_Firewall_iDMC.BemerkungColumn.DefaultValue = BemerkungTextBox.Text.ToString
    6. end sub

    gefüllt.
    Die richtige Eingabe des User wollte ich mit

    VB.NET-Quellcode

    1. Private Sub Tbl_Firewall_iDMCDataGridView_CellValidating(sender As Object, e As System.Windows.Forms.DataGridViewCellValidatingEventArgs) Handles Tbl_Firewall_iDMCDataGridView.CellValidating
    2. If e.ColumnIndex = 1 Then
    3. Dim wert As String = e.FormattedValue.ToString
    4. If wert.Length <> 30 And IsNumeric(wert) Then
    5. MessageBox.Show("iDMC " & wert & ") nicht korrekt!", "Abbruch!")
    6. Tbl_Firewall_iDMCBindingSource.CancelEdit()
    7. End If
    8. End If
    9. End Sub

    prüfen.
    Dies funktioniert aber nicht, weil das cellValidating immer bei e.columnIndex=5 stattfindet.
    Die 'User'-Spalte ist aber column = 1.

    Habt ihr eine Idee?

    Gruß
    Günter
    Gruß Günter
    Kann ich nicht nachstellen. Habe ein DGV mit 3 Spalten (1. normal, 2. ReadOnly, 3. unsichtbar), ein Label und folgenden Code

    VB.NET-Quellcode

    1. Private Sub DataGridView1_CellValidating(sender As Object, e As DataGridViewCellValidatingEventArgs) Handles DataGridView1.CellValidating
    2. Label1.Text = e.ColumnIndex.ToString
    3. End Sub

    läuft; es wird immer einmalig der korrekte ColumnIndex angezeigt

    Mach mal testweise Zeile#7 raus. Nicht, dass das zu nem Bearbeitungskreis führt, von wegen DGV-Inhalt bearbeiten -> automatisch BindingSource -> automatisch DGV-Inhalt bearbeiten
    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.
    Auch wenn du den Thread als erledigt markiert hast, der bessere Weg ist immer eindeutig zu sein.
    Solche Verwechslungen sind leicht zu vermeiden.
    Angenommen das DGV heißt If DataGridView1 und die gewünschte Spalte heißt DgvColumn1Name, den egal ob du es nutzt oder nicht, Namen haben sie ja doch, schau im Designer und wähle dort gleich sprechende Namen. Nicht so wie ich, ich habe den Namen nur so gewählt um ihn im Code hier verständlicher zu haben.
    Du kannst jetzt den Index direkt vergleichen, und zwar so:

    VB.NET-Quellcode

    1. If DataGridView1.CurrentCell.ColumnIndex = DgvColumn1Name.DisplayIndex Then
    2. End If