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 : Sélectionner tout - Visualiser dans une fenêtre à part
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.