0

我是这里的新手,我遇到了一个关于(DataGridView 删除部分)无法自行解决的错误,所以请来这里寻求指导并帮助我......感谢您的帮助!

加载数据事件

     `Public Sub loadtoDGV()
        Dim sqlq As String = "SELECT * FROM chattbl"
        Dim sqlcmd As New SqlCommand
        Dim sqladpt As New SqlDataAdapter
        Dim tbl As New DataTable

        With sqlcmd
            .CommandText = sqlq
            .Connection = conn
        End With

        With sqladpt
            .SelectCommand = sqlcmd
            .Fill(tbl)
        End With

        DataGridView1.Rows.Clear()
        For i = 0 To tbl.Rows.Count - 1
            With DataGridView1
                .Rows.Add(tbl.Rows(i)("ChatConttentID"), tbl.Rows(i)("Title"),   tbl.Rows(i)("ChatContent"), tbl.Rows(i)("ChatDateTime"), tbl.Rows(i)("Username"))
            End With
        Next
        conn.Close()
    End Sub`

发生删除部分错误

    `If conn.State = ConnectionState.Closed Then
        conn.Open()
    End If
    For i = 0 To DataGridView1.Rows.Count - 1
        Dim deletemore As Integer = DataGridView1.SelectedRows(i).Cells(0).Value <------{line occurred error}
        Dim sqlq As String = ("DELETE FROM chattbl WHERE ChatConttentID = " &         deletemore & "")
        Dim sqlcmd As New SqlCommand

        With sqlcmd
            .CommandText = sqlq
            .Connection = conn
            .ExecuteNonQuery()
        End With
    Next

    loadtoDGV()`
4

1 回答 1

0

因此,我假设您的应用程序是 Windows 窗体应用程序,并且您正在使用控件...抱歉,如果此假设不正确。

您的错误可能是因为您用于编写 For 循环的逻辑:

For i = 0 To DataGridView1.Rows.Count - 1
    Dim deletemore As Integer = DataGridView1.SelectedRows(i).Cells(0).Value <------{line occurred error}

您正在遍历 DataGridView 中的所有行,然后尝试将该索引从SelectedRows集合中取出。

我认为,您的循环假设在很多时候都是不正确的,因为它假设 DataGridView 中的所有行都被选中(因为这是唯一一次当 DataGridView 中的项目数和DataGridView.SelectedRows 中的项目数将相等并使循环工作)。

您可能会更好地使用以下方法循环遍历选定的行:

Dim numSelectedRows = DataGridView1.SelectedRows.Count

For i = 0 to (numSelectedRows - 1)
     Dim deletemore As Integer = DataGridView1.SelectedRows(i).Cells(0).Value

PS。围绕控件的选择模式的SelectedRows属性有一些注意事项(请参阅链接中的“备注”部分)。我假设您正在遵循这些警告。

于 2013-03-21T02:19:45.397 回答