我正在使用UltraGrid在表中插入数据。问题是我需要使用Web服务进行插入,更新,删除。我从Web服务获取dataSet并将其显示到网格中但是当我对网格进行一些更改(例如插入或更新数据)时,我还需要将新的dataSet发送到Web服务,以便Web服务更新数据。
这是表格 ID(PK,int,not null) 名称(nvarchar 100,null)
这是客户端的代码:
Public Sub Refresh()
Dim p As localhost.Service1 = New localhost.Service1
'bind datatable to UltraGrid
UltraGrid1.DataSource = p.GetData()
End Sub
这是从表中获取数据的Web服务代码:
<WebMethod()> Public Function GetData() As DataSet
Dim custDA As SqlDataAdapter = New SqlDataAdapter("SELECT ID,Name FROM Btable", nwindConn)
Dim custDS As DataSet = New DataSet()
custDA.MissingSchemaAction = MissingSchemaAction.AddWithKey
custDA.Fill(custDS, "Btable")
GetData= custDS
End Function
这一切正常但现在我想将新行插入网格并将其发送到Web服务并从那里插入。我怎么能这样做?谢谢!
答案 0 :(得分:1)
您应该处理UltraTable的事件“AfterRowInsert”并从新行检索值。然后,您可以在Web服务上调用一个新的Web方法,将该行插入数据库。
网络方法可能看起来像这样......
<WebMethod()> Public sub AddRecord(id as integer, name as string)
dim sSql as string = "INSERT INTO Btable (ID, Name) VALUES (@ID, @Name)"
Dim oCmd as SqlCommand = nwindConn.CreateCommand()
oCmd.CommandText = sSql
oCmd.Parameters.Add("@ID", SqlDbType.Int).Value = id
oCmd.Parameters.Add("@ID", SqlDbType.VarChar).Value = name
oCmd.ExecuteNonQuery()
End Function
如果您的ID列是自动编号,则会略有不同。在这种情况下,您的Web方法只接受名称参数,并返回新记录的ID。在MS SQL Server中,您可以通过在INSERT查询后调用SCOPE_IDENTITY()来获取此信息。