2016-08-08 53 views
0

我有一個Datagridview,其中包含4列項目,數量,價格,金額。用戶應該在第一列中輸入項目名稱。我有一個在數據庫中的表,所有的項目名稱存儲。所以插入的名字應該被檢查,如果它在數據庫中。如果它不在數據庫中,我希望單元格像TextBox一樣被清除,並且焦點保留在該單元格中。用戶不應該被允許繼續下去,直到他進入正確的項目名稱......到目前爲止,我已經嘗試過這種我想datagridview單元格被清除並保持專注

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 

,這裏是我的datagridview datagridview1

datagridview2

這個形象是一個datagridview,在用戶輸入時顯示給用戶,以便他可以從中選擇項目名稱。它的作用類似於ComboBox自動完成。

+0

而不是期待用戶瞭解每個項目的確切名稱的代碼,爲什麼不把該列組合框列,他們挑選項目的?這樣他們不能選擇一個錯誤的項目。 – Plutonix

+0

你的例子不能編譯。你有一個額外的'如果' – djv

+0

我不指望用戶知道確切的名稱。我忘了提及我有一個datagridview只出現,並顯示所有項目的名稱作爲用戶在該單元格中鍵入。它建議他鍵入的項目。他可以通過單擊它從DataGridiew中選擇,然後datagridview變得不可見,或者他可以編寫確切的項目名稱。但是如果他不從中選擇一個或者從中選擇一個呢。我希望細胞的內容被清除,細胞保持聚焦 –

回答

0

最後我得到了我在找的東西。我要在單元格驗證事件

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