我是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."
我的编码有问题吗?或者我错过了任何成功的部分?抱歉我的英语不好:)谢谢。
答案 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