Sql server 如何使用vb.net更新datagridview中已删除的行
我是vb.net的初学者。最近我在datagridview上遇到了一个非常奇怪的问题。 这是我的密码:Sql server 如何使用vb.net更新datagridview中已删除的行,sql-server,vb.net,datagridview,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(Dat
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的列,其中包含主键。
添加函数和删除函数都必须更新到数据库中。
添加功能似乎做得很好,但删除功能让我头疼。。。
我收到了以下错误消息:
"An unhandled exception of type 'System.Data.MissingPrimaryKeyException' occurred in System.Data.dll
Additional information: Table doesn't have a primary key."
我的编码有问题吗?还是说我错过了任何一个成功的部分?很抱歉我的英语不好:谢谢。正如前面指出的,问题源于该表上没有主键。为了缓解这个问题,您可以轻松地定义主键列。定义列时,Rows.Find方法确切地知道要删除的行 您也可以使用DataTable.Select函数,该函数不带主键,但如果该数字位于另一行,则不会将其删除。例如:假设有3行Id为1、12、32。如果您使用select函数并希望从列表中删除12,那么它将不起作用,因为32中存在2 将主键添加到表中 您可以在加载时执行此操作,这样您的数据表就可以预先设置主键。当它显示YOURUNIQUECOLUMN时,您可以在这里指定唯一的列;通常是某种id列。完成此操作后,可以删除该行
dr = DataSet11.Tables("calculatetable").Rows.Find(TextBox1.Text)
If dr IsNot Nothing Then
DataSet11.Tables("calculatetable").Rows.Remove(dr)
End If
看起来这可能是您的问题:假设您的表确实有一个主键,那么您可以从sql server中的表加载datatable,但不指定datatable的primarykey。请注意,Find方法的参数是datatable的键,但是由于没有指定主键,它将失败。你可能只需要看看上面贴的链接,从另一个角度找到你的那一排。@Villager A,看起来你可能是新来的。如果这个问题对你的问题有帮助,请通过勾选我的答案来标记这个答案,以便其他人知道这个问题已经得到了回答。谢谢
dr = DataSet11.Tables("calculatetable").Rows.Find(TextBox1.Text)
If dr IsNot Nothing Then
DataSet11.Tables("calculatetable").Rows.Remove(dr)
End If