2016-08-08 6 views
0

fokussiert bleiben habe ich eine Datagridview, die 4 Spalten Artikel enthält, Menge, Preis, Menge. Der Benutzer sollte den Artikelnamen in der ersten Spalte eingeben. Ich habe eine Tabelle in der Datenbank, in der alle Einzelteilnamen gespeichert werden. Also sollte der eingefügte Name überprüft werden, ob es in der Datenbank ist oder nicht. Wenn es nicht in der Datenbank ist, möchte ich die Zelle wie eine TextBox löschen und der Fokus bleibt in dieser Zelle. der Benutzer sollte nicht erlaubt werden, um weiter, bis er Namen das richtige Element betritt ... Bis jetzt habe ich schon versucht, dieseich will Datagridview Zelle gelöscht werden und

Private Sub DataGridView1_CellEndEdit(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) Handles DataGridView1.CellEndEdit 

     connect() 
     sql = "Select ProductName from Products where ProductName = '" & Me.DataGridView1.Rows(e.RowIndex).Cells(0).Value.ToString & "' " 
     objcmd = New SqlCommand(sql, objcon) 
     OBJDR = objcmd.ExecuteReader 
     If OBJDR.Read = False Then 
      MessageBox.Show("Item Name Is not in the Items list", "Item Name Error", MessageBoxButtons.OK, MessageBoxIcon.Error) 
        ''clearing the cell '  
      Me.DataGridView1.Rows(e.RowIndex).Cells(0).Value = "" 
      '' here i want the cell to get foucus and the cursor remain like textbox 
      DataGridView1.CurrentCell = DataGridView1.Rows(DataGridView1.CurrentCell.RowIndex).Cells(0) 
      ' DataGridView1.BeginEdit(True) 
      Exit Sub 
     End If 
End Sub 

hier ist das Bild meiner Datagridview datagridview1

datagridview2

dieses ist ein Datagridview, die den Benutzer als er Typen angezeigt wird, damit er Itemnamen holen kann von it.it wie ein ComboBox Auto-Vervollständigen funktioniert.

+0

Statt die Benutzer erwarten die genauen Namen der einzelnen Artikel zu wissen, warum nicht, dass Spalte einer ComboBox Spalte machen, dass sie von dem Einzelteil aufheben? Auf diese Weise können sie keinen falschen Artikel auswählen. – Plutonix

+0

Ihr Beispiel kompiliert nicht. Sie haben einen zusätzlichen 'End If' – djv

+0

i den Benutzer nicht erwarte den genauen Namen zu kennen. Ich vergesse zu erwähnen, ich habe eine Datagridview, die nur erscheint und zeigt die Namen aller Elemente, wie der Benutzer in dieser Zelle eingibt. Es schlägt die Gegenstände vor, während er tippt. Er kann von dieser Datagridiew auswählen, indem er darauf klickt und dann wird die Datagridview unsichtbar oder er kann den genauen Gegenstandsnamen schreiben. aber was ist, wenn er nicht einen davon entnimmt oder entnimmt? Ich möchte den Inhalt der Zelle gelöscht werden und die Zelle –

Antwort

0

Endlich habe ich, was ich suchte. Ich habe den Code in Zelle Validierung Ereignisse

Private Sub DataGridView1_CellValidating(sender As Object, e As DataGridViewCellValidatingEventArgs) Handles DataGridView1.CellValidating 
     With DataGridView1.Rows(e.RowIndex) 
      If e.ColumnIndex = 0 Then 
       If Not ItemExists(.Cells(e.ColumnIndex).Value) Then 
        MessageBox.Show("Item Name Is not in the Items list", "Item Name Error", MessageBoxButtons.OK, MessageBoxIcon.Error) 
        e.Cancel = True 
       End If 
      End If 
     End With 
    End Sub 

Function ItemExists(ByVal itemname As String) As Boolean 
     Dim bResult As Boolean = True 

     connect() 
     Sql = "Select ProductName from Products where ProductName = '" & itemname & "' " 
     objcmd = New SqlCommand(Sql, objcon) 
     OBJDR = objcmd.ExecuteReader 
     If OBJDR.Read = False Then 
      bResult = False 
     End If 

     Return bResult 
    End Function