从sql绑定的Datagrid中删除多个记录

时间:2014-01-14 02:03:54

标签: vb.net winforms datagrid

以下步骤允许我通过选中datagrid上的复选框一次删除多条记录。该程序是在ASP.net上编写的,但现在我在VB.net上使用winform。

我有一个列名为“Delete”的数据网格,其中有复选框。用户会检查 它想要删除的记录,并删除这些记录。我使用“票号”列值作为查询的参数。

我遇到的问题是,自从为ASP.Net编写以来,我无法找到winform VB.net如何相当于这一行:

Dim chkDelete As CheckBox = DirectCast(grdRoster.Rows(i).Cells(0).FindControl("Delete_Row"), CheckBox)

FindControl不是System.Windows.Forms.DataGridViewCell的成员。另外,我很确定整个行都是错误的,因为复选框 位于datagrid列上,设置为ColumnType:DataGridViewCheckBoxColumn,并不是真正的单独控件。

如何在winform上获得相同的结果?这是我的整个代码。

    Private Sub btnDelete_Click(sender As Object, e As EventArgs) Handles btnDelete.Click

        'Create String Collection to store 
        'IDs of records to be deleted 

        Dim ticketNumberCollection As New StringCollection()
        Dim strTicketNumber As String = String.Empty

        'Loop through GridView rows to find checked rows 

        For i As Integer = 0 To grdRoster.Rows.Count - 1

            Dim chkDelete As CheckBox = DirectCast(grdRoster.Rows(i).Cells(0).FindControl("Delete_Row"), CheckBox)

            If chkDelete IsNot Nothing Then
                If chkDelete.Checked Then
                    strTicketNumber = grdRoster.Rows(i).Cells(1).ToString
                    ticketNumberCollection.Add(strTicketNumber)
                End If
            End If

        Next

        'Call the method to Delete records 
        DeleteMultipleRecords(ticketNumberCollection)

        ' rebind the GridView
        grdRoster.DataBind()

    End Sub

   ' Sub to delete multiple records
   ' @param "idCollection" calls the string collection above
   ' and deletes the selected record separated by ","

    Private Sub DeleteMultipleRecords(ByVal ticketNumberCollection As StringCollection)

        Dim IDs As String = ""

        'Create string builder to store 
        'delete commands separated by ,

        For Each id As String In ticketNumberCollection

            IDs += id.ToString() & ","

        Next

        Try
            Dim strTicketID As String = IDs.Substring(0, IDs.LastIndexOf(","))

            DataSheetTableAdapter.DeleteRecord(strTicketID)

        Catch ex As Exception

            Dim errorMsg As String = "Error in Deletion"
            errorMsg += ex.Message
            Throw New Exception(errorMsg)

        Finally

            Me.Close()


        End Try
    End Sub

1 个答案:

答案 0 :(得分:1)

要从数据绑定gridview中删除多个记录,您应该在运行时创建DataGridViewCheckBoxColumn

    Dim chk As New DataGridViewCheckBoxColumn()
            DataGridView1.Columns.Add(chk)
            chk.HeaderText = "Select"

'然后将datagridview与数据集

绑定
 Dim sql As String = "SELECT * FROM table_name"
    ' Dim connection As New SqlConnection(connectionString)
    conn.Open()
    sCommand = New SqlCommand(sql, conn)
    sAdapter = New SqlDataAdapter(sCommand)
    sBuilder = New SqlCommandBuilder(sAdapter)
    sDs = New DataSet()
    sAdapter.Fill(sDs, "table_name")
    sTable = sDs.Tables("table_name")

 DataGridView1.DataSource = sDs.Tables("table_name")

'然后遍历每一列并获得检查值

Try
        DataGridView1.EndEdit()
        For j = Me.DataGridView1.Rows.Count - 1 To 0 Step -1
            If Not IsDBNull(DataGridView1.Rows(j).Cells(0).Value) Then
                If DataGridView1.Rows(j).Cells(0).Value = True Then
                    check = True
                    If MessageBox.Show("Do you want to delete these records?", "Delete", MessageBoxButtons.YesNo) = DialogResult.Yes Then
                        For i = Me.DataGridView1.Rows.Count - 1 To 0 Step -1
                            If Not IsDBNull(DataGridView1.Rows(i).Cells(0).Value) Then
                                If DataGridView1.Rows(i).Cells(0).Value = True Then

                                 'remove the checked columns and update datatable
                                    DataGridView1.Rows.RemoveAt(i)
                                    sAdapter.Update(sTable)
                                End If
                            End If
                        Next
                    Else
                        Return
                    End If
                Else
                End If
            End If
        Next
        If check = False Then
            MsgBox("Nothing Selected")
        End If

                Catch ex As Exception
        MsgBox(ex.ToString)
    End Try