簡體   English   中英

從數據庫中刪除datagridview中的選定行

[英]Delete selected rows in datagridview from database

我試圖刪除用戶使用SQL Server在datagridview中選擇的行。

我有一個datagridview,它加載數據庫的內容,在這種情況下為UsernamePassword 請記住,每個用戶名在數據庫中都是唯一的,因此我應該能夠使用唯一的用戶名刪除每一行。

我當前擁有的SQL是DELETE FROM 'Users&Passwords' WHERE 'Username' = ? 我不確定這是否完全正確,但是每當我單擊QueryBuilder它似乎都接受。

我必須嘗試執行的代碼如下:

    Private Sub btn_remove_Click(sender As Object, e As EventArgs) Handles btn_remove.Click
        For Each row As DataGridViewRow In DataGridView1.SelectedRows
            Dim usernametodelete As String = DataGridView1.SelectedRows(0).Cells(0).Value.ToString
            'TextBox1.Text += usernametodelete
            Me.Users_PasswordsTableAdapter.DeleteUser(usernametodelete)
            Me.Users_PasswordsTableAdapter.Fill(Me.ManageUsersDataSet._Users_Passwords)
        Next
    End Sub

我希望當用戶單擊“ Remove User(s)按鈕時,從datagridview中選擇的行將從數據庫中刪除行。 任何幫助將不勝感激。

您將比需要的投入更多。 您理想地采取的步驟是:

0)重命名表格,使其沒有&字符-這只是在麻煩

1)使用以下過程將表添加到數據集中:右鍵單擊設計圖面,新建tableadapter,配置連接字符串,將查詢設置為SELECT * FROM Users WHERE Username LIKE @username ,確保設置了其他內容,例如是否您要生成dbdirect方法,以及是否要數據集刷新新值

2)在數據源窗口中(默認情況下可能不會顯示,請在Visual Studio菜單中找到它)將“用戶”節點從數據源窗口拖放到表單上。 這將創建綁定到類型化數據表的datagridview,還創建一個數據集,tableadapter,tableadaptermanager(並非嚴格需要;可以刪除),一個綁定導航器工具條(再次並非嚴格要求,但上面有一個方便的預接線保存按鈕)和一個綁定源。 它還會將一些代碼預填充到form_load事件處理程序中以填充數據表

3)就是這樣-您的表單有一個網格,綁定到一個數據表。 該網格能夠刪除行-單擊行標題,然后按鍵盤上的Delete按鈕,行消失。 單擊工具欄中的“保存”圖標,更改將保存到數據庫中。 您唯一要做的就是首先將數據放入表中。 我提供了一個SQL,允許您選擇一些要加載的用戶名,但是您可以通過將Form_Load中的代碼行更改為以下內容來輕松地使其全部加載:

yourTableAdapterName.Fill(yourDatasetname.YourDatatableName, "%")

傳遞百分比作為名稱就像在DOS中使用*通配符。 LIKE%將選擇所有記錄。 當然,您也可以保留默認設置(它將引用工具欄上的文本框),而是運行程序,將%放入工具欄上的文本框中,然后單擊“填充”。 或者,您可以在文本框中輸入JOHNSMITH或JOHN%並填充,以分別加載該用戶

希望您已經做過1和2。

關於所有這些東西如何工作的背景故事:

DataTables是數據庫中表的客戶端表示。 並不是要它們包含數據庫中的所有數據,而只是要處理其中的一部分。 從數據庫加載行時,可以對其進行編輯,刪除(標記為已刪除),並在調用tableAdapter.Update(yourtable)所做的更改將tableAdapter.Update(yourtable)在數據庫中。 請注意,即使它稱為Update ,該方法也將保存新行(通過執行INSERT),刪除行(SQL DELETE)並進行更新(SQL UPDATE)。 如果您的數據表從數據庫中抽取了4行,然后添加2行,則對已加載的行中的3行進行更改,並刪除第4行,然后調用tableadapter.Update將所有這些更改保存到數據庫中。 您不需要選擇數據表,而是相應地調用tableadapter.insert / update / delete來手動保留這些更改。 因此,使用表適配器的流程為:

tableAdapter.Fill(datatable, maybe,parameters,to,control,the,fill,here)  

'work with the datatable here, change, insert, delete. Use loops/code, use the UI, etc

tableAdapter.Update(datatable) 'save changes
 I suggest putting an id column in your datagridview and just hide it so that you can easily delete the record you want to remove easily without conflict, because if you will use a username, what if theres a duplicate username exist.



   Private Sub BTNDELETE_Click(sender As Object, e As EventArgs) Handles BTNDELETE.Click
                Public result As Integer = 0
                Public cmd As New MySqlCommand
                strcon.Open() 'your connection string here
                With cmd
                    .Connection = strcon 'your connection string
                    .CommandText = "DELETE FROM `users` WHERE `id` = '" & DTGLIST.CurrentRow.Cells(0).Value.ToString() & "';"
                    result = cmd.ExecuteNonQuery
                    If result > 0 Then
                       MsgBox("Successfully Removed.", MsgBoxStyle.Information, "Info")
                       DTGLIST.Rows.Remove(DTGLIST.SelectedRows(0))
                    End If
                End With
                strcon.Close() 'close the connection string
        End Sub

設法弄清楚為什么我的刪除查詢幾天前不起作用。 這是由於我的SQL不正確。 這為我工作, DELETE FROM [Users&Passwords] WHERE (Username = ?)

在我的代碼中還包含行Me.Users_PasswordsTableAdapter.DeleteUser(usernametodelete)使其起作用。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM