Rabeea qabaha
Rabeea qabaha

Reputation: 606

prevent go to next row when duplicated value in `datagridview`

I have datagrid that user will add values in just one column , and i want to prevent duplicated data in this column, i had mange that by the code bellow,

what I want is to keep the selection (focus) in the same editing cell(x) if the entered data is duplicated, so I tried to get the current row index and return to it if the data is duplicated but its not working.

row_index = DataGridView1.CurrentRow.Index.ToString()

Dim cell As DataGridViewCell = DataGridView1.Rows(row_index).Cells(1)
DataGridView1.CurrentCell = cell
DataGridView1.BeginEdit(True)

NOTE : User will Add barcode number, so he will use barcode scanner or add it manually and press enter key.

Private Sub DataGridView1_RowValidated(sender As Object, e As DataGridViewCellEventArgs) Handles DataGridView1.RowValidated
    If DataGridView1.Rows.Count > 2 Then
        Dim i As Integer = 0
        Dim row_index As Integer
        ' loop condition will loop while the row count is less or equal to i
        While i <= DataGridView1.Rows.Count - 1
            Dim j As Integer = 1

            ' loop condition will loop while the row count is less or equal to j
            While j <= DataGridView1.Rows.Count - 1
                Dim str As String = DataGridView1.Rows(i).Cells(1).Value()
                Dim str1 As String = DataGridView1.Rows(j).Cells(1).Value()

                If Not str1 = "" AndAlso Not str = "" Then
                    If str1 = str Then
                        'row_index = DataGridView1.SelectedCells.Item(i).RowIndex.ToString()
                        row_index = DataGridView1.CurrentRow.Index.ToString()

                        Dim cell As DataGridViewCell = DataGridView1.Rows(row_index).Cells(1)
                        DataGridView1.CurrentCell = cell
                        DataGridView1.BeginEdit(True)

                        Exit Sub
                    End If

                End If


                j += 1

            End While

            i += 1
        End While

    End If
End Sub

Upvotes: 0

Views: 96

Answers (2)

user10556691
user10556691

Reputation: 11

You can try it also in a for loop. This is how I do it. If what you mean is to stop/retain the selection(focus) or go to in a cell/row whenever it is a duplicate with the current data you have. This should work fine.

enter code here

For i = 0 To Datagridview1.Rows.Count - 1
    If Datagridview1.Rows(i).Cells(1).Value = DataYouWillInput Then
        DataGridView1.CurrentCell = DataGridView1.Rows(i).Cells(1)
        Exit for
   End If    
Next

enter code here

Upvotes: 1

user10556691
user10556691

Reputation: 11

If your condition returns true with the condition of current data and data you'll be adding. Just exit your loop. Use this.

DataGridView1.CurrentCell = DataGridView1.Rows(i).Cells(1)

Upvotes: 0

Related Questions