如何使用vb.net更新datagridview中已删除的行

时间:2014-07-11 19:19:48

标签: sql-server vb.net datagridview

我是vb.net的初学者。最近我在datagridview上遇到了一个非常奇怪的问题。 这是我的代码:

Public Class testing
Dim bm As BindingManagerBase
Dim dt As DataTable
Dim dr As DataRow

Private Sub testing_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    OleDbDataAdapter1.Fill(DataSet11)
    bm = Me.BindingContext(DataSet11, "calculatetable")
End Sub

Public Sub btnCalculate_Click(sender As Object, e As EventArgs) Handles btnCalculate.Click
    Dim a As Integer
    Dim max As Integer
    a = 0
    OleDbDataAdapter1.Update(DataSet11, "calculatetable")
    dt = DataSet11.Tables("calculatetable")
    max = dt.Rows.Count - 1
    For len As Integer = 0 To max
        dr = dt.Rows(len)
        a = dr("Number") + a
    Next
    Label1.Text = a
End Sub

Private Sub btnAdd_Click(sender As Object, e As EventArgs) Handles btnAdd.Click
    dt = DataSet11.Tables("calculatetable")
    dr = dt.NewRow()
    dr(0) = TextBox1.Text
    dt.Rows.Add(dr)
End Sub

Private Sub btnDelete_Click(sender As Object, e As EventArgs) Handles btnDelete.Click
    dt = DataSet11.Tables("calculatetable")
    dr = dt.Rows.Find(TextBox1.Text)
    dr.Delete()
End Sub
End Class

实际上,我正在尝试为我的收银系统项目做一个计算表。我有一个文本框供用户输入数字,用于在新行中添加新数据并删除所选行。 在我的数据库中,我有一个名为“calculatetable”的表,并且有一个名为“Number”的列,其中包含Primary键。 添加功能和删除功能都必须更新到数据库中。 添加功能似乎表现不错,但删除功能让我很头疼...... 我收到此错误消息:

"An unhandled exception of type 'System.Data.MissingPrimaryKeyException' occurred in System.Data.dll
Additional information: Table doesn't have a primary key."

我的编码有问题吗?或者我错过了任何成功的部分?抱歉我的英语不好:)谢谢。

1 个答案:

答案 0 :(得分:0)

正如已经指出的那样,问题源于该表上没有主键。要缓解此问题,您可以轻松定义主键列。定义列时,Rows.Find方法确切地知道要删除的行。

你也可以在没有主键的情况下使用DataTable.Select函数,但如果说这个号码在另一行,它就不会删除它。例如:假设您有3行,Id为1,12,32。如果您使用select函数并希望从列表中删除12,它将无法工作,因为32存在于32中。

将主键添加到您的表格中

 DataSet11.Tables("calculatetable").PrimaryKey = New DataColumn() {DataSet11.Tables("calculatetable").Columns("YOURUNIQUECOLUMN")}

您可以在加载时执行此操作,这样您的数据表就可以预先设置它的主键。如果它显示“YOURUNIQUECOLUMN”,您可以在此处指定您唯一的列;通常是某种id列。完成后,您可以删除行...

 dr = DataSet11.Tables("calculatetable").Rows.Find(TextBox1.Text)

 If dr IsNot Nothing Then
  DataSet11.Tables("calculatetable").Rows.Remove(dr)
 End If