我有一个程序,询问用户从数据库收集并存储在数据表中的一系列问题。
我有一个系统选择两个随机数,一个用于确定哪个问题,一个用于确定答案的显示顺序。我希望问题保留在数据表中,直到用户正确无误为止,之后该问题不会再出现。
我的数据表称为DT,并且有一行代码:
DT.Rows.RemoveAt(QNumber)
听起来应该删除所选的行。不过我对此有疑问。
例如,如果QNumber为2,则删除第2行。那么这会将所有内容从第3行移到第2行,然后从第4行到第3行等等,或者这只会使第2行变为空白,从而破坏我的代码吗?
答案 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的结果的第一条记录 - 而不是整个表中的记录索引。