0

コードの何が問題なのか知りたいのですが。削除したい場合は、チェックボックスをオンにする必要があります。1つのレコードを削除できますが、複数のレコードを削除したい場合、エラーは発生しませんが、レコードは削除されませんでした。これが私のコードです

 Protected Sub chkSelect_CheckedChanged(ByVal sender As Object, ByVal e As EventArgs)
    Dim chkTest As CheckBox = DirectCast(sender, CheckBox)
    Dim grdRow As GridViewRow = DirectCast(chkTest.NamingContainer, GridViewRow)

    Dim bin As TextBox = DirectCast(grdRow.FindControl("txtBin"), TextBox)
    Dim wheatGrist As TextBox = DirectCast(grdRow.FindControl("txtWheatGrist"), TextBox)
    Dim HB43S As TextBox = DirectCast(grdRow.FindControl("txtHB43S"), TextBox)
    Dim M_NIR As TextBox = DirectCast(grdRow.FindControl("txtNIR"), TextBox)
    Dim HB43 As TextBox = DirectCast(grdRow.FindControl("txtHB43"), TextBox)
    Dim WG_NIR As TextBox = DirectCast(grdRow.FindControl("txtWGNIR"), TextBox)
    Dim glutematic As TextBox = DirectCast(grdRow.FindControl("txtGlutematic"), TextBox)
    Dim handwash As TextBox = DirectCast(grdRow.FindControl("txtHandwash"), TextBox)
    Dim distilledWater As TextBox = DirectCast(grdRow.FindControl("txtDistilled"), TextBox)


    If chkTest.Checked Then
        bin.[ReadOnly] = False
        wheatGrist.[ReadOnly] = False
        HB43S.[ReadOnly] = False
        M_NIR.[ReadOnly] = False
        HB43.[ReadOnly] = False
        WG_NIR.[ReadOnly] = False
        glutematic.[ReadOnly] = False
        handwash.[ReadOnly] = False
        distilledWater.[ReadOnly] = False

        bin.ForeColor = System.Drawing.Color.Blue
        wheatGrist.ForeColor = System.Drawing.Color.Blue
        HB43S.ForeColor = System.Drawing.Color.Blue
        M_NIR.ForeColor = System.Drawing.Color.Blue
        HB43.ForeColor = System.Drawing.Color.Blue
        WG_NIR.ForeColor = System.Drawing.Color.Blue
        glutematic.ForeColor = System.Drawing.Color.Blue
        handwash.ForeColor = System.Drawing.Color.Blue
        distilledWater.ForeColor = System.Drawing.Color.Blue

    Else
        bin.[ReadOnly] = True
        wheatGrist.[ReadOnly] = True
        HB43S.[ReadOnly] = True
        M_NIR.[ReadOnly] = True
        HB43.[ReadOnly] = True
        WG_NIR.[ReadOnly] = True
        glutematic.[ReadOnly] = True
        handwash.[ReadOnly] = True
        distilledWater.[ReadOnly] = True

        bin.ForeColor = System.Drawing.Color.Black
        wheatGrist.ForeColor = System.Drawing.Color.Black
        HB43S.ForeColor = System.Drawing.Color.Black
        M_NIR.ForeColor = System.Drawing.Color.Black
        HB43.ForeColor = System.Drawing.Color.Black
        WG_NIR.ForeColor = System.Drawing.Color.Black
        glutematic.ForeColor = System.Drawing.Color.Black
        handwash.ForeColor = System.Drawing.Color.Black
        distilledWater.ForeColor = System.Drawing.Color.Black

    End If
End Sub
Private Sub UncheckAll()
    For Each row As GridViewRow In GridView1.Rows
        Dim chkUncheck As CheckBox = DirectCast(row.FindControl("chkSelect"), CheckBox)

        Dim bin As TextBox = DirectCast(row.FindControl("txtBin"), TextBox)
        Dim wheatGrist As TextBox = DirectCast(row.FindControl("txtWheatGrist"), TextBox)
        Dim HB43S As TextBox = DirectCast(row.FindControl("txtHB43S"), TextBox)
        Dim M_NIR As TextBox = DirectCast(row.FindControl("txtNIR"), TextBox)
        Dim HB43 As TextBox = DirectCast(row.FindControl("txtHB43"), TextBox)
        Dim WG_NIR As TextBox = DirectCast(row.FindControl("txtWGNIR"), TextBox)
        Dim glutematic As TextBox = DirectCast(row.FindControl("txtGlutematic"), TextBox)
        Dim handwash As TextBox = DirectCast(row.FindControl("txtHandwash"), TextBox)
        Dim distilledWater As TextBox = DirectCast(row.FindControl("txtDistilled"), TextBox)

        chkUncheck.Checked = False

        bin.ForeColor = System.Drawing.Color.Black
        wheatGrist.ForeColor = System.Drawing.Color.Black
        HB43S.ForeColor = System.Drawing.Color.Black
        M_NIR.ForeColor = System.Drawing.Color.Black
        HB43.ForeColor = System.Drawing.Color.Black
        WG_NIR.ForeColor = System.Drawing.Color.Black
        glutematic.ForeColor = System.Drawing.Color.Black
        handwash.ForeColor = System.Drawing.Color.Black
        distilledWater.ForeColor = System.Drawing.Color.Black

    Next
End Sub
Protected Sub btnDelete_Click(ByVal sender As Object, ByVal e As EventArgs)
    'Create String Collection to store IDs of 
    'records to be deleted 
    Dim idCollection As New StringCollection()
    Dim strID As Integer

    'Loop through GridView rows to find checked rows 
    For i As Integer = 0 To GridView1.Rows.Count - 1
        Dim chkDelete As CheckBox = DirectCast(GridView1.Rows(i).Cells(0).FindControl("chkSelect"), CheckBox)

        If chkDelete IsNot Nothing Then
            If chkDelete.Checked Then
                strID = GridView1.Rows(i).Cells(1).Text
                idCollection.Add(strID)
            End If
        End If

    Next
    If idCollection.Count > 0 Then
        'Call the method to Delete records 
        DeleteRecords(idCollection)

        ' rebind the GridView
        GridView1.DataBind()
        'Else
        'lblMessage.Text = "Please select any row to delete"
    End If

End Sub

Private Sub DeleteRecords(ByVal idCollection As StringCollection)
    'Create sql Connection and Sql Command
    Dim cnnOLEDB As New OleDbConnection(strConnectionString)
    Dim cmd As New OleDbCommand
    Dim IDs As Integer

    For Each id As Integer In idCollection
        IDs += id & ","
    Next
    Try
        Dim test As Integer = IDs
        Dim sql As String = "DELETE FROM [1BK] WHERE [sampleID] in (" & test & ")"
        Dim ANS As Integer
        ANS = MsgBox("Are you sure want to delete selected record ?" & vbCrLf & vbCrLf, MsgBoxStyle.YesNo)
        If ANS = vbYes Then
            cmd.CommandType = CommandType.Text
            cmd.CommandText = sql
            cmd.Connection = cnnOLEDB
            cnnOLEDB.Open()
            cmd.ExecuteNonQuery()
        End If
        ANS = 0
    Catch ex As Exception
        Dim errorMsg As String = "Error in Deletion"
        errorMsg += ex.Message
        Throw New Exception(errorMsg)
    Finally
        cnnOLEDB.Close()
    End Try
End Sub
4

1 に答える 1

0

deleterecords でこれを行います:

Dim test as String = String.Join(",", idCollection)

これの代わりに

For Each id As Integer In idCollection     
    IDs += id & ","  
Next 

次に、この行が実際に新しいデータベースの値をダウンロードするかどうかは完全にはわかりません。

 GridView1.DataBind() 

データベースの値を再度ダウンロードする必要があります。テーブルを再度グリッドビューにバインドするだけではありません。

于 2012-10-19T07:20:15.863 に答える