2010-02-18 6 views
0

J'utilise UltraGrid pour insérer des données dans le tableau. Le problème est que je dois faire insérer, mettre à jour, supprimer avec le service Web. J'obtiens dataSet du service Web et l'affiche dans la grille, mais lorsque je fais des modifications sur la grille, par exemple insérer ou mettre à jour des données, j'ai besoin d'envoyer un nouveau dataset au service web pour que le service web mette à jour les données.dataSet dans Web Service

Ceci est la table ID (PK, int, non null) Nom (nvarchar 100, null)

Ceci est le code pour le côté client:

Public Sub Refresh() 
    Dim p As localhost.Service1 = New localhost.Service1 
    'bind datatable to UltraGrid 
    UltraGrid1.DataSource = p.GetData() 
    End Sub 

Ceci est le code pour service Web pour obtenir des données de la table:

<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 

tout cela fonctionne bien, mais maintenant je veux insérer une nouvelle ligne à la grille et l'envoyer au service Web un nd l'insérer à partir de là. Comment je peux faire ça? Merci!

Répondre

1

Vous devez gérer l'événement "AfterRowInsert" de l'UltraTable et extraire les valeurs de la nouvelle ligne. Vous pouvez ensuite appeler une nouvelle méthode Web sur votre service Web pour insérer la ligne dans votre base de données.

La méthode Web peut ressembler à ceci ....

<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 

Si votre colonne ID est un numéro d'auto, il serait légèrement différent. Dans cette situation, votre méthode Web n'accepterait qu'un paramètre de nom et retournerait l'ID du nouvel enregistrement. Dans MS SQL Server, vous pouvez obtenir cela en appelant SCOPE_IDENTITY() après votre requête INSERT.

+0

-1 pour suggérer d'utiliser @@ Identity au lieu de Scope_Identity(). Après avoir réparé votre réponse, je vais vous donner le point. – ErikE

+1

Merci. Cela aide si vous écrivez un commentaire avec @Emtucifor au début, donc je reçois une notification (au cas où j'oublie de revenir et de regarder). – ErikE