commandBuilder avec jointure
Bonjour
Je suis en train de développer une application vb.net en VS2010, SGBD : SQL Server 2008.
J'ai un plan qui se compose de plusieurs rayon et chaque rayon se compose de plusieurs articles.
J'ai donc les tables suivantes :
- plan (code,..)
- rayon (id,code,#numPlan,...)
- article (code,designation,prix,...)
- article_rayon (id,#article,#rayon,quantite)
j'ai chargé 3 datasets :
- un pour la les plans
- un pour les rayons du plan sélectionné
- un pour les articles du rayon sélectionné
C'est bon pour l'affichage.
J'ai un bouton Enregistrer qui permet d'ajouter un nouveau plan avec ses rayons et les articles, modifier un plan et supprimer.
Je peut faire ça avec la méthode classique (insert, update, delete) mais y a t-il une autre solution plus efficace par commandbuilder par exemple.
voici le code:
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50
|
Module MonModule
Dim strConn As String = "Data Source=localhost; Integrated Security=SSPI; Initial Catalog=MaBase"
Public cnx As New SqlConnection(strConn)
'la fonction pour raffraichissement qui retourne un dataview
Public Function rafraichier(ByVal requete As String) As DataView
cnx.Open()
Dim da = New SqlDataAdapter(requete, cnx)
cnx.Close()
Dim ds As New DataSet()
ds.Clear()
da.Fill(ds, "matable")
Dim dv = ds.Tables("matable").DefaultView
dv.AllowEdit = True
Return dv
End Function
End Module
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
'afficher la liste des plans dans un datagrid pour le test
Dim dv As DataView = rafraichier("SELECT * FROM [plan]")
dgvPlan.DataSource = dv
End Sub
'afficher la liste des rayons du plan donné dans un listbox et datagrid(pour le test)
Private Sub txtPlan_Validated(ByVal sender As Object, ByVal e As System.EventArgs) Handles txtPlan.Validated
lstRayon.Items.Clear()
Dim dv As DataView = rafraichier("SELECT * FROM [Rayon] WHERE numplan='" & txtPlan.Text & "'")
dgvRayon.DataSource = dv
'listbox
Dim pos As Integer
ReDim lstRayon.Tag(dv.Count - 1)
For cmp = 0 To dv.Count - 1
pos = lstRayon.Items.Add(dv(cmp).Item("code") & Chr(9) & dv(cmp).Item("designation"))
lstRayon.Tag(pos) = dv(cmp).Item("id")
Next cmp
'liste des artciles du rayon sélectionné dans la listbox
Private Sub lstRayon_SelectedIndexChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles lstRayon.SelectedIndexChanged
Dim rayon As Integer = lstRayon.Tag(lstRayon.SelectedIndex)
Dim dv As DataView = rafraichier("SELECT Article_Rayon.ID,Article_Rayon.Repere,Article_Rayon.Rayon,Article_Rayon.Article,Article.Designation,Article.Dimension,Article.Prix,Article_Rayon.Quantite " & _
"FROM [Article],[Article_Rayon] " & _
"WHERE Article_Rayon.rayon=" & rayon & " AND Article_Rayon.Article=Article.Code")
dgvArticle.DataSource = dv
End Sub |
Merci.