从数据表中删除行

时间:2015-10-13 18:33:59

标签: vb.net datatable

我有一个程序,询问用户从数据库收集并存储在数据表中的一系列问题。

我有一个系统选择两个随机数,一个用于确定哪个问题,一个用于确定答案的显示顺序。我希望问题保留在数据表中,直到用户正确无误为止,之后该问题不会再出现。

我的数据表称为DT,并且有一行代码:

DT.Rows.RemoveAt(QNumber)

听起来应该删除所选的行。不过我对此有疑问。

例如,如果QNumber为2,则删除第2行。那么这会将所有内容从第3行移到第2行,然后从第4行到第3行等等,或者这只会使第2行变为空白,从而破坏我的代码吗?

1 个答案:

答案 0 :(得分:1)

由于您没有发布任何上下文,因此有一些测试片段:

Button1_Click加载表

Button2_Click"进程"每行并可选择删除该行。

在您的情况下"流程"意味着:显示问题并循环直到你得到答案。

在你的情况下,Button2代码将确定要加载哪条记录,可能在数据表上使用.Select()返回"问题"问,并最终删除。

Dim da As SqlDataAdapter
Dim ds As DataSet
Dim dt As DataTable
Dim con As New System.Data.SqlClient.SqlConnection()

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    Try
        Using con As New System.Data.SqlClient.SqlConnection()
            con.ConnectionString = "Data Source=APCD03;Initial Catalog=OIStest;Integrated Security=True"
            Dim rdr As Data.SqlClient.SqlDataReader
            con.Open()
            Dim cmd As New SqlCommand("SELECT  [DBLinked] as PK ,[TEBackupDate] FROM [OISTest].[dbo].[_DBLink]", con)
            rdr = cmd.ExecuteReader(CommandBehavior.CloseConnection)
            dt = New DataTable
            dt.Load(rdr)
            rdr.Close()
        End Using
    Catch ex As Exception
        MsgBox(ex, ex.Message)
    End Try
End Sub

Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
    For Each row As DataRow In dt.Rows
        If Not row.RowState = DataRowState.Deleted Then
            If MsgBox("Delete this row, PK: " & row("PK"), vbYesNo) = MsgBoxResult.Yes Then
                row.Delete()
            End If
        End If
    Next
End Sub

Button3演示选择要处理和删除的特定行:

Private Sub Button3_Click(sender As Object, e As EventArgs) Handles Button3.Click
    Dim rows() As DataRow = dt.Select("PK='test row'")
    If rows.Length = 0 Then
        MsgBox("row was deleted already")
    Else
        MsgBox(rows(0)(0)) ' display PK
        If MsgBox("Delete " & rows(0)(0), vbYesNo) = MsgBoxResult.Yes Then
            rows(0).Delete()
        End If
    End If
End Sub

请注意rows(0)是select的结果的第一条记录 - 而不是整个表中的记录索引。