DataGridView leaves an empty row after escape pressed on new row

Discussion in 'Microsoft VB .NET' started by Asif Mohammed, Jul 26, 2006.

  1. Hello,

    I have a datagridview bound to a database table with 2 columns. One is an ID column "NameID" which is hidden, the other is called "Name".

    The schema picture is here : http://img89.imageshack.us/img89/1251/dbschemaep9.jpg

    What happens is :
    1. Form loads with values from database inside the DGV
    2. I press the checkbox to enable editing/adding etc in the grid (see code event)

    Picture : http://img145.imageshack.us/img145/8819/step1yy3.jpg

    3good. I click inside the NewRow and type "a" or whatever (something invalid) ...

    Picture : http://img80.imageshack.us/img80/1923/step2cl5.jpg

    4good. and press escape ... the row is deleted! (Just as I want it)

    But... alternatively

    3bad. I click inside the NewRow and type "a" or whatever (something invalid), then click outside the DGV on the checkbox or the button, the DGV still keeps focus as "a" fails validation and forces the DGV to keep focus, an error icon is also shown as normal

    Picture : http://img80.imageshack.us/img80/1923/step2cl5.jpg
    Picture : http://img89.imageshack.us/img89/4729/step3jl5.jpg

    4bad. THEN I press escape ... and there is an empty row left! I have no idea why this happens as the focus never left the DGV (as far as I know) so I dont see why the behaviour is different.

    Picture : http://img89.imageshack.us/img89/8317/step4yg5.jpg

    ==================

    Please if anyone knows what Im doing wrong, let me know, I havent been able to figure out why it does this for over a day.

    ==================

    CODE :

    Imports System.Text.RegularExpressions

    Public Class frmNames

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    'TODO: This line of code loads data into the 'SampleDbDataSet.Names' table. You can move, or remove it, as needed.
    Me.NamesTableAdapter.Fill(Me.SampleDbDataSet.Names)
    End Sub

    Private Sub dgvNames_CellEndEdit(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) Handles dgvNames.CellEndEdit
    ' Remove the error icon (valid input or escape pressed)
    dgvNames.Rows(e.RowIndex).ErrorText = String.Empty
    End Sub

    Private Sub dgvNames_CellValidated(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) Handles dgvNames.CellValidated
    ' Get reference to current datarow
    Dim CurrentDataRow As SampleDbDataSet.NamesRow = DirectCast(NamesBindingSource.Current, DataRowView).Row

    ' Update current row
    If CurrentDataRow.RowState <> DataRowState.Unchanged Then
    NamesTableAdapter.Update(CurrentDataRow)
    End If
    End Sub

    Private Sub dgvNames_CellValidating(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewCellValidatingEventArgs) Handles dgvNames.CellValidating
    ' Don't validate an empty row
    If dgvNames.Rows(e.RowIndex).IsNewRow Then Exit Sub

    ' Check the name against a pattern
    If Regex.IsMatch(e.FormattedValue, "^[A-Z]\. [A-Z][a-z]+['-]?[a-z]+$") = False Then
    dgvNames.Rows(e.RowIndex).ErrorText = "The name is invalid, it should be something like A. Mohammed"
    e.Cancel = True
    End If
    End Sub

    Private Sub chkEdit_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkEdit.CheckedChanged
    ' Enable or disable the grid for editing
    With dgvNames
    .ColumnHeadersVisible = chkEdit.Checked
    .RowHeadersVisible = chkEdit.Checked
    .AllowUserToAddRows = chkEdit.Checked
    .AllowUserToDeleteRows = chkEdit.Checked
    .ReadOnly = Not chkEdit.Checked
    End With
    End Sub

    Private Sub btnClose_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnClose.Click
    ' Close the form
    Me.Close()
    End Sub
    End Class



    --------------= Posted using GrabIt =----------------
    ------= Binary Usenet downloading made easy =---------
    -= Get GrabIt for free from http://www.shemes.com/ =-
     
    Asif Mohammed, Jul 26, 2006
    #1
    1. Advertisements

Want to reply to this thread or ask your own question?

It takes just 2 minutes to sign up (and it's free!). Just click the sign up button to choose a username and then you can ask your own questions on the forum.
Similar Threads
  1. Bob
    Replies:
    0
    Views:
    613
  2. Asif Mohammed
    Replies:
    0
    Views:
    244
    Asif Mohammed
    Jul 28, 2006
  3. Guest
    Replies:
    0
    Views:
    403
    Guest
    Nov 1, 2006
  4. aasif
    Replies:
    1
    Views:
    191
    aasif
    Jan 13, 2007
  5. hzgt9b
    Replies:
    3
    Views:
    866
    hzgt9b
    Oct 22, 2007
Loading...

Share This Page