Ajout, modifier et supprimer sans access et pour toute les tables en .net

Soyez le premier à donner votre avis sur cette source.

Vue 14 617 fois - Téléchargée 1 727 fois

Description

une interface qui reçoi une table, des conditions, les champs à afficher, les pourcentages des champs, le type des champs, ...

prend tout ça et crée un table avec des boutons de configuration

très pratique, mais un peu dur a expliquer vite comme ça
je me sert de mes outils pour me connecter à une base de donnée Access

toute les validation sont faire (texte, entier, double, couleur, requete, boolean)

on peut, si on a des département, par exemple, au lieu d'affichier ID, afficher un combobox avec les donner de l'autre table (faut envoyer un type requete)

c'est très compliquer a tout montrer, mais amuser vous avez, vous pourrez faire pleins de chose très intéressante

Source / Exemple :


Public Class AjouterModifierSupprimé
    Inherits System.Windows.Forms.UserControl

#Region " Windows Form Designer generated code "

#Region "variable"
    Public nb As Integer
    Public tableau() As Type.AjoutModSupp
    Public condition As Type.AjoutModSuppDroit
    Public table As String
    Public where As String
    Public ordre() As String
#End Region 'variable

#Region "New, masi pas utiliser, faut le laisser sinon VB.net veut pas compiler"
    Public Sub New()
        MyBase.New()

        'This call is required by the Windows Form Designer.
        InitializeComponent()

        'Add any initialization after the InitializeComponent() call

    End Sub
#End Region 'New, masi pas utiliser, faut le laisser sinon VB.net veut pas compiler

#Region "New"
    Public Sub New(ByVal tableau() As Type.AjoutModSupp, ByVal table As String, ByVal condition As Type.AjoutModSuppDroit, Optional ByVal where As String = "", Optional ByVal ordre() As String = Nothing)
        MyBase.New()

        '#Zone " mise en mémoire "
        Me.nb = nb
        Me.tableau = tableau
        Me.table = table
        Me.condition = condition
        Me.where = where
        Me.ordre = ordre
        '#End Zone

        'This call is required by the Windows Form Designer.
        InitializeComponent()

        rafraichir() 'création du tableau
    End Sub
#End Region 'New

    'UserControl overrides dispose to clean up the component list.
    Protected Overloads Overrides Sub Dispose(ByVal disposing As Boolean)
        If disposing Then
            If Not (components Is Nothing) Then
                components.Dispose()
            End If
        End If
        MyBase.Dispose(disposing)
    End Sub

    'Required by the Windows Form Designer
    Private components As System.ComponentModel.IContainer

    'NOTE: The following procedure is required by the Windows Form Designer
    'It can be modified using the Windows Form Designer.  
    'Do not modify it using the code editor.
    Friend WithEvents VScrollBar1 As System.Windows.Forms.VScrollBar
    Friend textbox() As Object
    Friend WithEvents contour1 As test.Contour
    Friend WithEvents Panel1 As System.Windows.Forms.Panel
    Friend WithEvents pnlPanel1 As System.Windows.Forms.Panel
    Friend Button1() As DllBoutons.XpBouton
    Friend Button2() As DllBoutons.XpBouton
    Friend Button3() As DllBoutons.XpBouton
    Friend WithEvents Button4 As DllBoutons.XpBouton
    <System.Diagnostics.DebuggerStepThrough()> Private Sub InitializeComponent()
        Me.VScrollBar1 = New System.Windows.Forms.VScrollBar
        Me.contour1 = New test.Contour
        Me.Panel1 = New System.Windows.Forms.Panel
        Me.pnlPanel1 = New System.Windows.Forms.Panel
        Me.Panel1.SuspendLayout()
        Me.SuspendLayout()
        '
        'VScrollBar1
        '
        Me.VScrollBar1.LargeChange = 1
        Me.VScrollBar1.Location = New System.Drawing.Point(370, 10)
        Me.VScrollBar1.Maximum = 0
        Me.VScrollBar1.Name = "VScrollBar1"
        Me.VScrollBar1.Size = New System.Drawing.Size(15, 315)
        Me.VScrollBar1.TabIndex = 0
        '
        'contour1
        '
        Me.contour1.BackColor = System.Drawing.Color.AliceBlue
        Me.contour1.Location = New System.Drawing.Point(0, 0)
        Me.contour1.Name = "contour1"
        Me.contour1.Size = New System.Drawing.Size(400, 335)
        Me.contour1.TabIndex = 2
        '
        'Panel1
        '
        Me.Panel1.BackColor = System.Drawing.Color.AliceBlue
        Me.Panel1.Controls.Add(Me.pnlPanel1)
        Me.Panel1.Location = New System.Drawing.Point(12, 12)
        Me.Panel1.Name = "Panel1"
        Me.Panel1.Size = New System.Drawing.Size(360, 315)
        Me.Panel1.TabIndex = 3
        '
        'pnlPanel1
        '
        Me.pnlPanel1.BackColor = System.Drawing.Color.AliceBlue
        Me.pnlPanel1.Location = New System.Drawing.Point(0, 0)
        Me.pnlPanel1.Name = "pnlPanel1"
        Me.pnlPanel1.Size = New System.Drawing.Size(360, 0)
        Me.pnlPanel1.TabIndex = 2
        '
        'AjouterModifierSupprimé
        '
        Me.BackColor = System.Drawing.SystemColors.Control
        Me.Controls.Add(Me.Panel1)
        Me.Controls.Add(Me.VScrollBar1)
        Me.Controls.Add(Me.contour1)
        Me.Name = "AjouterModifierSupprimé"
        Me.Size = New System.Drawing.Size(400, 335)
        Me.Panel1.ResumeLayout(False)
        Me.ResumeLayout(False)

    End Sub

#End Region

    Private Sub rafraichir()

        '#Zone " initiation des données "
        Me.pnlPanel1.Controls.Clear()
        Me.pnlPanel1.Size = New System.Drawing.Size(360, 0)
        Me.Panel1.Size = New System.Drawing.Size(360, 315)
        Me.VScrollBar1.Maximum = 0

        Dim i As Integer, j As Integer
        Dim chaine As String
        Dim compteur As Integer = 0
        Dim ordre As String

        Dim tableauRequete(,) As Type.DeuxDonnées
        ReDim tableauRequete(-1, 1)
        Dim tableauRequetepos As Integer
        Dim compteurRequete1 As Integer
        Dim compteurRequete2 As Integer
        compteurRequete1 = 0
        compteurRequete2 = 0
        '#End Zone

        '#Zone " Condition "
        If where <> "" And Mid(where, 1, Len("where ")) <> "where " Then
            where = "where " & where
        End If
        '#End Zone

        '#Zone " Order by "
        Try
            ordre = "order by " & Me.ordre(0)
            For i = 1 To UBound(Me.ordre)
                ordre += Me.ordre(i)
            Next i
        Catch
        End Try

        If ordre = Nothing And Mid(ordre, 1, Len("order by ")) <> "order by " Then
            ordre = "order by " & ordre
        End If
        '#End Zone

        '#Zone " évênement "
        Dim AjoutEvent As EventHandler = New EventHandler(AddressOf AjoutClic)
        Dim EnrEvent As EventHandler = New EventHandler(AddressOf EnrClic)
        Dim SuppEvent As EventHandler = New EventHandler(AddressOf SuppClic)
        Dim couleur As EventHandler = New EventHandler(AddressOf ChangerCouleur)
        '#End Zone

        '#Zone " Création de la requête "
        chaine = "select "
        For i = 0 To UBound(tableau)
            chaine += "[" & tableau(i).nom & "],"
            If tableau(i).type = "requete" Then
                BaseDonnee.ouvertureRST("select " & tableau(i).requêteID & "," & tableau(i).requêtetexte & " from " & tableau(i).requêteTable & " order by " & tableau(i).requêtetexte)
                compteurRequete2 = 0
                While BaseDonnee.read
                    ReDim Preserve tableauRequete(compteurRequete1, compteurRequete2)
                    tableauRequete(compteurRequete1, compteurRequete2).un = BaseDonnee.item(0)
                    tableauRequete(compteurRequete1, compteurRequete2).deux = BaseDonnee.item(1)
                    compteurRequete2 += 1
                End While
                compteurRequete1 += 1
            End If
        Next i
        chaine = Mid(chaine, 1, Len(chaine) - 1)
        chaine += " from " & table & " " & where & " " & ordre
        '#End Zone

        BaseDonnee.ouvertureRST(chaine)

        ReDim Button2(-1)
        ReDim Button3(-1)
        ReDim textbox(-1)

        If condition.Ajouter Then
            Me.Button4 = New DllBoutons.XpBouton
            Me.Button4.BackColor = System.Drawing.SystemColors.ControlLightLight
            Me.Button4.Boutonsonore = DllBoutons.XpBouton.Son.Muet
            Me.Button4.DialogResult = System.Windows.Forms.DialogResult.None
            Me.Button4.ImageAlign = DllBoutons.XpBouton.ImageAligns.Left
            Me.Button4.Location = New System.Drawing.Point(0, compteur * 20)
            Me.Button4.Name = "Button3"
            Me.Button4.Size = New System.Drawing.Size(64, 20)
            ReDim Me.Button4.Tag(1)
            Me.Button4.Tag(0) = compteur
            Me.Button4.Tag(1) = ""
            Me.Button4.Text = "Ajouter"
            AddHandler Button4.Click, AjoutEvent
            Me.pnlPanel1.Controls.Add(Me.Button4)

            tableauRequetepos = 0

            '#Zone " Si on peut ajouter (première ligne) "
            For i = 0 To UBound(tableau)
                ReDim Preserve textbox(UBound(textbox) + 1)
                Select Case LCase(tableau(i).type)
                    Case "chiffre"
                        Me.textbox(UBound(textbox)) = New System.Windows.Forms.NumericUpDown
                        Me.textbox(UBound(textbox)).Maximum = 999999
                        Me.textbox(UBound(textbox)).minimum = 0
                        Me.textbox(UBound(textbox)).value = 0
                    Case "date"
                        Me.textbox(UBound(textbox)) = New System.Windows.Forms.DateTimePicker
                        Me.textbox(UBound(textbox)).Format = 8
                        Me.textbox(UBound(textbox)).CustomFormat = "yyyy-MM-dd"
                    Case "boolean"
                        Me.textbox(UBound(textbox)) = New System.Windows.Forms.ComboBox
                        Me.textbox(UBound(textbox)).Items.AddRange(New Object() {"Oui", "Non"})
                    Case "requete"
                        Me.textbox(UBound(textbox)) = New System.Windows.Forms.ComboBox
                        For j = 0 To compteurRequete2 - 1
                            CType(Me.textbox(UBound(textbox)), ComboBox).Items.Add(tableauRequete(tableauRequetepos, j).deux)
                        Next j
                        CType(Me.textbox(UBound(textbox)), ComboBox).SelectedIndex = 0
                        tableauRequetepos += 1
                    Case "couleur"
                        Me.textbox(UBound(textbox)) = New Button
                        Me.textbox(UBound(textbox)).backcolor = Color.AliceBlue
                        AddHandler CType(textbox(UBound(textbox)), Button).Click, couleur
                    Case Else
                        Me.textbox(UBound(textbox)) = New TextBox
                        Me.textbox(UBound(textbox)).text = ""
                End Select
                If i = 0 Then
                    Me.textbox(UBound(textbox)).Location = New System.Drawing.Point(64, compteur * 20)
                Else
                    Me.textbox(UBound(textbox)).Location = New System.Drawing.Point(Me.textbox(UBound(textbox) - 1).Left + Me.textbox(UBound(textbox) - 1).Width + 1, compteur * 20)
                End If
                Me.textbox(UBound(textbox)).Name = "TextBox"
                Me.textbox(UBound(textbox)).Size = New System.Drawing.Size((pnlPanel1.Width - 64) * (tableau(i).pourcentage / 100) - 1, 20)
                ReDim Me.textbox(UBound(textbox)).Tag(2)
                Me.textbox(UBound(textbox)).Tag(0) = compteur
                Me.textbox(UBound(textbox)).Tag(1) = tableau(i).pourcentage
                Me.textbox(UBound(textbox)).Tag(2) = tableau(i).type
                Me.pnlPanel1.Controls.Add(Me.textbox(UBound(textbox)))
            Next i
            '#End Zone

            pnlPanel1.Height += 20 'agrandir le paneau d'affichage

            '#Zone " gestion de la barre de progress Bar "
            If Me.pnlPanel1.Height > Me.Panel1.Height Then
                Me.VScrollBar1.Maximum += 1
            End If
            '#End Zone

            compteur += 1
        End If

        While BaseDonnee.read

            '#Zone " Item à afficher "
            ReDim Preserve Button2(UBound(Button2) + 1)
            Me.Button2(UBound(Button2)) = New DllBoutons.XpBouton
            Me.Button2(UBound(Button2)).BackColor = System.Drawing.SystemColors.ControlLightLight
            Me.Button2(UBound(Button2)).Boutonsonore = DllBoutons.XpBouton.Son.Muet
            Me.Button2(UBound(Button2)).DialogResult = System.Windows.Forms.DialogResult.None
            Me.Button2(UBound(Button2)).ImageAlign = DllBoutons.XpBouton.ImageAligns.Left
            Me.Button2(UBound(Button2)).Location = New System.Drawing.Point(0, compteur * 20)
            Me.Button2(UBound(Button2)).Name = "Button2"
            Me.Button2(UBound(Button2)).Size = New System.Drawing.Size(30, 20)
            ReDim Me.Button2(UBound(Button2)).Tag(1)
            Me.Button2(UBound(Button2)).Tag(0) = compteur
            Me.Button2(UBound(Button2)).Tag(1) = BaseDonnee.item(condition.cle)
            Me.Button2(UBound(Button2)).Text = "Enr"
            AddHandler Button2(UBound(Button2)).Click, EnrEvent
            Me.pnlPanel1.Controls.Add(Me.Button2(UBound(Button2)))

            ReDim Preserve Button3(UBound(Button3) + 1)
            Me.Button3(UBound(Button3)) = New DllBoutons.XpBouton
            Me.Button3(UBound(Button3)).BackColor = System.Drawing.SystemColors.ControlLightLight
            Me.Button3(UBound(Button3)).Boutonsonore = DllBoutons.XpBouton.Son.Muet
            Me.Button3(UBound(Button3)).DialogResult = System.Windows.Forms.DialogResult.None
            Me.Button3(UBound(Button3)).ImageAlign = DllBoutons.XpBouton.ImageAligns.Left
            Me.Button3(UBound(Button3)).Location = New System.Drawing.Point(30, compteur * 20)
            Me.Button3(UBound(Button3)).Name = "Button3"
            Me.Button3(UBound(Button3)).Size = New System.Drawing.Size(34, 20)
            ReDim Me.Button3(UBound(Button3)).Tag(1)
            Me.Button3(UBound(Button3)).Tag(0) = compteur
            Me.Button3(UBound(Button3)).Tag(1) = BaseDonnee.item(condition.cle)
            Me.Button3(UBound(Button3)).Text = "Supp"
            AddHandler Button3(UBound(Button3)).Click, SuppEvent
            Me.pnlPanel1.Controls.Add(Me.Button3(UBound(Button3)))

            tableauRequetepos = 0

            For i = 0 To UBound(tableau)
                ReDim Preserve textbox(UBound(textbox) + 1)
                Select Case LCase(tableau(i).type)
                    Case "chiffre"
                        Me.textbox(UBound(textbox)) = New System.Windows.Forms.NumericUpDown
                        Me.textbox(UBound(textbox)).Maximum = 999999
                        Me.textbox(UBound(textbox)).minimum = 0
                        Me.textbox(UBound(textbox)).value = BaseDonnee.item(i)
                    Case "date"
                        Me.textbox(UBound(textbox)) = New System.Windows.Forms.DateTimePicker
                        Me.textbox(UBound(textbox)).Format = 8
                        Me.textbox(UBound(textbox)).CustomFormat = "yyyy-MM-dd"
                        Me.textbox(UBound(textbox)).text = BaseDonnee.item(i)
                    Case "boolean"
                        Me.textbox(UBound(textbox)) = New System.Windows.Forms.ComboBox
                        Me.textbox(UBound(textbox)).Items.AddRange(New Object() {"Oui", "Non"})
                        Me.textbox(UBound(textbox)).text = IIf(BaseDonnee.item(i), "Oui", "Non")
                    Case "requete"
                        Me.textbox(UBound(textbox)) = New System.Windows.Forms.ComboBox
                        For j = 0 To compteurRequete2 - 1
                            CType(Me.textbox(UBound(textbox)), ComboBox).Items.Add(tableauRequete(tableauRequetepos, j).deux)
                            If BaseDonnee.item(i) = tableauRequete(tableauRequetepos, j).un Then
                                CType(Me.textbox(UBound(textbox)), ComboBox).SelectedIndex = j
                            End If
                        Next j
                        tableauRequetepos += 1
                    Case "couleur"
                        Me.textbox(UBound(textbox)) = New Button
                        Me.textbox(UBound(textbox)).backcolor = System.Drawing.ColorTranslator.FromWin32(BaseDonnee.item(i))
                        AddHandler CType(textbox(UBound(textbox)), Button).Click, couleur
                    Case Else
                        Me.textbox(UBound(textbox)) = New TextBox
                        Me.textbox(UBound(textbox)).text = BaseDonnee.item(i)
                End Select
                If i = 0 Then
                    Me.textbox(UBound(textbox)).Location = New System.Drawing.Point(64, compteur * 20)
                Else
                    Me.textbox(UBound(textbox)).Location = New System.Drawing.Point(Me.textbox(UBound(textbox) - 1).Left + Me.textbox(UBound(textbox) - 1).Width + 1, compteur * 20)
                End If
                Me.textbox(UBound(textbox)).Name = "TextBox"
                Me.textbox(UBound(textbox)).Size = New System.Drawing.Size((pnlPanel1.Width - 64) * (tableau(i).pourcentage / 100) - 1, 20)
                ReDim Me.textbox(UBound(textbox)).Tag(2)
                Me.textbox(UBound(textbox)).Tag(0) = compteur
                Me.textbox(UBound(textbox)).Tag(1) = tableau(i).pourcentage
                Me.textbox(UBound(textbox)).Tag(2) = tableau(i).type
                If tableau(i).visible Then
                    Me.pnlPanel1.Controls.Add(Me.textbox(UBound(textbox)))
                End If
            Next i
            '#End Zone

            compteur += 1

            pnlPanel1.Height += 20 'agrandir le paneau d'affichage

            '#Zone " gestion de la barre de progress Bar "
            If Me.pnlPanel1.Height > Me.Panel1.Height Then
                Me.VScrollBar1.Maximum += 1
            End If
            '#End Zone

            Me.Button2(UBound(Button2)).Enabled = condition.Modification
            Me.Button3(UBound(Button3)).Enabled = condition.Suppression
        End While

        '#Zone " pareil, mais en bas pour l'ajout "
        If condition.Ajouter Then
            Me.Button4 = New DllBoutons.XpBouton
            Me.Button4.BackColor = System.Drawing.SystemColors.ControlLightLight
            Me.Button4.Boutonsonore = DllBoutons.XpBouton.Son.Muet
            Me.Button4.DialogResult = System.Windows.Forms.DialogResult.None
            Me.Button4.ImageAlign = DllBoutons.XpBouton.ImageAligns.Left
            Me.Button4.Location = New System.Drawing.Point(0, compteur * 20)
            Me.Button4.Name = "Button3"
            Me.Button4.Size = New System.Drawing.Size(64, 20)
            ReDim Me.Button4.Tag(0)
            Me.Button4.Tag(0) = compteur
            Me.Button4.Text = "Ajouter"
            AddHandler Button4.Click, AjoutEvent
            Me.pnlPanel1.Controls.Add(Me.Button4)

            tableauRequetepos = 0

            For i = 0 To UBound(tableau)
                ReDim Preserve textbox(UBound(textbox) + 1)
                Select Case LCase(tableau(i).type)
                    Case "chiffre"
                        Me.textbox(UBound(textbox)) = New System.Windows.Forms.NumericUpDown
                        Me.textbox(UBound(textbox)).Maximum = 999999
                        Me.textbox(UBound(textbox)).minimum = 0
                        Me.textbox(UBound(textbox)).value = 0
                    Case "date"
                        Me.textbox(UBound(textbox)) = New System.Windows.Forms.DateTimePicker
                        Me.textbox(UBound(textbox)).Format = 8
                        Me.textbox(UBound(textbox)).CustomFormat = "yyyy-MM-dd"
                    Case "boolean"
                        Me.textbox(UBound(textbox)) = New System.Windows.Forms.ComboBox
                        Me.textbox(UBound(textbox)).Items.AddRange(New Object() {"Oui", "Non"})
                    Case "requete"
                        Me.textbox(UBound(textbox)) = New System.Windows.Forms.ComboBox
                        For j = 0 To compteurRequete2 - 1
                            CType(Me.textbox(UBound(textbox)), ComboBox).Items.Add(tableauRequete(tableauRequetepos, j).deux)
                        Next j
                        CType(Me.textbox(UBound(textbox)), ComboBox).SelectedIndex = 0
                        tableauRequetepos += 1
                    Case "couleur"
                        Me.textbox(UBound(textbox)) = New Button
                        Me.textbox(UBound(textbox)).backcolor = Color.AliceBlue
                        AddHandler CType(textbox(UBound(textbox)), Button).Click, couleur
                    Case Else
                        Me.textbox(UBound(textbox)) = New TextBox
                        Me.textbox(UBound(textbox)).text = ""
                End Select
                If i = 0 Then
                    Me.textbox(UBound(textbox)).Location = New System.Drawing.Point(64, compteur * 20)
                Else
                    Me.textbox(UBound(textbox)).Location = New System.Drawing.Point(Me.textbox(UBound(textbox) - 1).Left + Me.textbox(UBound(textbox) - 1).Width + 1, compteur * 20)
                End If
                Me.textbox(UBound(textbox)).Name = "TextBox"
                Me.textbox(UBound(textbox)).Size = New System.Drawing.Size((pnlPanel1.Width - 64) * (tableau(i).pourcentage / 100) - 1, 20)
                ReDim Me.textbox(UBound(textbox)).Tag(2)
                Me.textbox(UBound(textbox)).Tag(0) = compteur
                Me.textbox(UBound(textbox)).Tag(1) = tableau(i).pourcentage
                Me.textbox(UBound(textbox)).Tag(2) = tableau(i).type
                Me.pnlPanel1.Controls.Add(Me.textbox(UBound(textbox)))
            Next i

            pnlPanel1.Height += 20

            If Me.pnlPanel1.Height > Me.Panel1.Height Then
                Me.VScrollBar1.Maximum += 1
            End If

            compteur += 1
        End If
        '#End Zone

        nb = UBound(tableau)

        OnResize(Nothing)
        'Add any initialization after the InitializeComponent() call
    End Sub

#Region "permet de redimentionner le controle dépendant de la form"
    Protected Overrides Sub OnResize(ByVal e As System.EventArgs)
        Dim i As Integer
        Me.VScrollBar1.Height = Me.Height - 24
        Me.VScrollBar1.Left = Me.Width - Me.VScrollBar1.Width - 12
        Me.Panel1.Height = Me.Height - 24
        Me.Panel1.Width = Me.Width - Me.VScrollBar1.Width - 24
        Me.pnlPanel1.Width = Me.Panel1.Width
        contour1.Size = Me.Size
        Try
            i = Me.textbox(0).Tag(1)
        Catch
            Exit Sub
        End Try
        For i = 0 To UBound(Me.textbox)
            Me.textbox(i).Width = (pnlPanel1.Width - 64) * (Me.textbox(i).Tag(1) / 100) - 1
            If i Mod (nb + 1) = 0 Then
                Me.textbox(i).Left = 64
            Else
                Me.textbox(i).Left = Me.textbox(i - 1).Left + Me.textbox(i - 1).Width
            End If
        Next i
        If Me.pnlPanel1.Height > Me.Panel1.Height Then
            VScrollBar1.Maximum = (Me.pnlPanel1.Height - Me.Panel1.Height) \ 20
        Else
            VScrollBar1.Maximum = 0
        End If
    End Sub
#End Region 'permet de redimentionner le controle dépendant de la form

#Region "permet de scroller"
    Private Sub VScrollBar1_Scroll(ByVal sender As System.Object, ByVal e As System.Windows.Forms.ScrollEventArgs) Handles VScrollBar1.Scroll
        Dim temp As Single
        If VScrollBar1.Maximum <> 0 Then
            pnlPanel1.Top = VScrollBar1.Value * -20
        End If
    End Sub
#End Region 'permet de scroller

    Private Sub AjoutClic(ByVal sender As Object, ByVal e As System.EventArgs)
        If ajouter(sender, e) Then
            _Date.sleep(2)
            rafraichir()
        End If
    End Sub

    Private Sub EnrClic(ByVal sender As Object, ByVal e As System.EventArgs)
        If ValiderLigne(CType(sender, DllBoutons.XpBouton).Tag(0)) Then
            supprimer(sender, e)
            ajouter(sender, e, CType(sender, DllBoutons.XpBouton).Tag(1))
            _Date.sleep(2)
            rafraichir()
        End If
    End Sub

    Private Sub SuppClic(ByVal sender As Object, ByVal e As System.EventArgs)
        supprimer(sender, e)
        _Date.sleep(2)
        rafraichir()
    End Sub

    Private Sub supprimer(ByVal sender As Object, ByVal e As System.EventArgs)
        BaseDonnee.ouvertureRST("delete * from " & table & " where " & tableau(condition.cle).nom & " = " & SQL(CType(sender, DllBoutons.XpBouton).Tag(1), tableau(condition.cle).type))
    End Sub

    Private Sub ChangerCouleur(ByVal sender As Object, ByVal e As System.EventArgs)
        Dim couleurDialog As System.Windows.Forms.ColorDialog = New System.Windows.Forms.ColorDialog
        With couleurDialog
            .Color = sender.BackColor
            .SolidColorOnly = True
            If .ShowDialog = DialogResult.OK Then
                sender.BackColor = .Color
            End If
        End With
    End Sub

    Private Function ajouter(ByVal sender As Object, ByVal e As System.EventArgs, Optional ByVal ID As Integer = -1) As Boolean
        If ValiderLigne(CType(sender, DllBoutons.XpBouton).Tag(0)) Then
            Dim sql As String
            Dim i As Integer
            sql = "insert into " & Me.table & " values("
            For i = 0 To nb
                If tableau(i).visible Then
                    sql += Me.SQL(textbox(i + CType(sender, DllBoutons.XpBouton).Tag(0) * (nb + 1)), tableau(i)) & ","
                Else
                    sql += Me.SQL(sender, i, ID) & ","
                End If
            Next i
            sql = Mid(sql, 1, Len(sql) - 1) & ")"
            BaseDonnee.ouvertureRST(sql)
            Return True
        Else
            Return False
        End If
    End Function

    Private Function ValiderLigne(ByVal numero As Integer) As Boolean
        Dim i As Integer

        For i = 0 To nb
            If Me.tableau(i).visible Then
                If Not Valider(textbox(i + numero * (nb + 1))) Then
                    MsgBox("opération annulé")
                    Return False
                End If
            End If
        Next i
        Return True
    End Function

    '#Zone " valider les résultats "
    Private Function Valider(ByVal texte As Object) As Boolean
        Dim temp As Boolean
        Select Case LCase(texte.Tag(2))
            Case "chiffre"
                temp = ValiderChiffre(texte.value)
            Case "double"
                temp = ValiderDouble(texte.Text)
            Case "date"
                temp = ValiderDate(texte.Text)
            Case "boolean"
                temp = True
            Case "requete"
                temp = True
            Case "couleur"
                temp = True
            Case "lettre"
                temp = True
        End Select
        If LCase(texte.Tag(2)) <> "couleur" Then
            If temp Then
                texte.BackColor = Color.White
            Else
                texte.BackColor = Color.Red
            End If
        End If
        Return temp
    End Function
    '#End Zone

    Private Function ValiderChiffre(ByVal texte As String) As Boolean
        Dim temp As Long
        Try
            temp = texte
            If temp = texte Then
                Return True
            Else
                MsgBox("Chiffre non Valide. Le chiffre doit-être un entier", MsgBoxStyle.Critical, "Erreur")
                Return False
            End If
        Catch
            MsgBox("Chiffre non Valide. Le chiffre doit-être un entier", MsgBoxStyle.Critical, "Erreur")
            Return False
        End Try
    End Function

    Private Function ValiderDouble(ByVal texte As String) As Boolean
        Dim temp As Double
        Try
            temp = texte
            Return True
        Catch
            MsgBox("Chiffre non Valide.", MsgBoxStyle.Critical, "Erreur")
            Return False
        End Try
    End Function

    Private Function ValiderDate(ByVal texte As String) As Boolean
        Dim temp As Date
        Try
            temp = texte
            Return True
        Catch ex As Exception
            MsgBox("Date non Valide. La date doit-être sous le format 'yyyy-mm-dd'" & vbCrLf & "ex: " & Format(Now, "yyyy-MM-dd"), MsgBoxStyle.Critical, "Erreur")
            Return False
        End Try
    End Function

    '#Zone " création des élément dans la requête SQL "
    Private Function SQL(ByVal texte As Object, ByVal tableau As Type.AjoutModSupp) As String
        Dim i As Integer
        Select Case LCase(texte.Tag(2))
            Case "chiffre"
                Return texte.value
            Case "double"
                Return texte.Text
            Case "boolean"
                Return IIf(texte.text = "Oui", "true", "false")
            Case "date"
                Return "#" & texte.Text & "#"
            Case "texte"
                Return "'" & texte.Text & "'"
            Case "lettre"
                Return "'" & texte.Text & "'"
            Case "boolean"
                Return texte.text
            Case "couleur"
                Return System.Drawing.ColorTranslator.ToWin32(texte.backcolor)
            Case "requete"
                BaseDonnee.ouvertureRST("select " & tableau.requêteID & " from " & tableau.requêteTable & " order by " & tableau.requêtetexte)
                For i = 0 To CType(texte, ComboBox).SelectedIndex
                    BaseDonnee.read()
                Next i
                Return BaseDonnee.item(0)
        End Select
    End Function
    '#End Zone

#Region "création des élément dans la requête SQL"
    Private Function SQL(ByVal texte As String, ByVal type As String) As String
        Select Case LCase(type)
            Case "chiffre"
                Return texte
            Case "chiffre"
                Return texte
            Case "boolean"
                Return IIf(texte = "Oui", "true", "false")
            Case "date"
                Return "#" & texte & "#"
            Case "texte"
                Return "'" & texte & "'"
            Case "texte"
                Return "'" & texte & "'"
            Case "boolean"
                Return texte
        End Select
    End Function
#End Region 'création des élément dans la requête SQL

#Region "création des élément dans la requête SQL"
    Private Function SQL(ByVal sender As Object, ByVal i As Integer, ByVal ID As Integer) As String
        If i <> condition.cle And LCase(tableau(i).nom) = "id" Then
            Select Case LCase(tableau(i).type)
                Case "chiffre"
                    Return tableau(i).défaut
                Case "double"
                    Return tableau(i).défaut
                Case "boolean"
                    Return tableau(i).défaut
                Case "date"
                    Return "#" & tableau(i).défaut & "#"
                Case "texte"
                    Return "'" & tableau(i).défaut & "'"
                Case "lettre"
                    Return "'" & tableau(i).défaut & "'"
                Case "boolean"
                    Return tableau(i).défaut
                Case "couleur"
                    Return System.Drawing.ColorTranslator.ToWin32(sender.BackColor)
            End Select
        ElseIf ID = -1 Then
            BaseDonnee.ouvertureRST("select max(id) as maxid from " & table)
            Return BaseDonnee.item("maxid") + 1
        Else
            Return ID
        End If
    End Function
#End Region 'création des élément dans la requête SQL
End Class

Codes Sources

A voir également

Ajouter un commentaire Commentaires
Messages postés
63
Date d'inscription
lundi 13 septembre 2004
Statut
Membre
Dernière intervention
16 novembre 2007

JUSTE UN QUESTION QUI NE CONCERNE PAS LE PROJET

CE N'EST PAS LA PREMIERE FOIS QUE CELA ARRIVE, JE N'ARRIVE PAS A OUVRIR LE PROJET .SLN

VISUAL STUDIO ME REPOND :

LE FICHIER SELECTIONNE N'EST PAS UN FICHIER SOLUTION VISUAL STUDIO VALIDE

JE POSSEDE LA VERSION 7.0.9500
.NET FRAMEWORK : 1.0.3705

SOMEONE POURRAIT IL M'AIDER


TOTOCHITO
Messages postés
2336
Date d'inscription
samedi 14 juillet 2001
Statut
Membre
Dernière intervention
5 mai 2009
5
je vasi beaucoup plus loin que le DataTable-Datagrid, juste pour la validation

t'essayera de faire avec un DataTable-Datagrid des jeux de couleur a stocker dans une base de donnée ou de choisi seulement une date ou d,avoir un combobox avec le résultat d'une autre requête SQL

et pour ajouter une nouvelle validation, ça prend 5 minutes, faut seulement déclarer la nouvelle validation, la forme que SQL prend ( ' # ou rien) pis quoi faire quand on clic dessus (combox, DateTimePicker, ouiNon, ...) et c'est fini

le fais que ça soit dans une seule class ça dérange pas, utiliser la POO ça sert a éviter de rendre un conde redondant en réutilisant un même code ou quand un gros bout de code est répété, c,est plus simple de faire un gros objet avec. Mais là, tout se construit en boucle, même dans une autre calls, ça finirais par être plus compliquer qu'autre chose.

j'avou pour le select case, storer le résultat dans une variable avant aurait été mieux, mais la différence en temps entre des if imbriquer et un select case, c'est identique, sauf que ej trouve un select case plus propre que des if imbriquer qui test la même chose

chacun ses gout
Messages postés
58
Date d'inscription
vendredi 12 juillet 2002
Statut
Membre
Dernière intervention
20 août 2004

c'etait pas une critique, juste une remarque

l'interet ?

rendre le code moins monolithique (il n'y a qu'une classe presentement) eviter les Select Case LCase(tableau(i).type) a repetition...
Rendre ca extensible avec des nouveaux types de colonnes...
Il est certain que pour ton cas a toi c'est suffisant, mais si qqun veut reprendre le code c'est moins evident

Bref faire une DataTable-Datagrid :)

L'idee est sympa
Messages postés
2336
Date d'inscription
samedi 14 juillet 2001
Statut
Membre
Dernière intervention
5 mai 2009
5
t,aurasi rien sauvé, même l'inverse, puisque le code est couper en fonction

ça aurait été quoi la différence, a chaque reccordet, j,appel une class qui exécuterais exactement le même code, sauf situer dans une class à pars.

pour une ligne, ça vaut pas la peine. ça aurait juste déplacer les fonction, mais tout aurait été encore là.

j'utilise la POO quand la ligne que je dois ajouter est complexe, genre pusieurs textbox, label, bouton, ... mais qui tienns sur plus qu'une ligne ou qua ça dimmention pour changer. La, les ligne sont de grandeur fixe, avec toujours le même nombre d'object.

je voie réellement pas où tu aurais sauver et ça fasi quand même 2 ans que je programme en POO avec Java
Messages postés
58
Date d'inscription
vendredi 12 juillet 2002
Statut
Membre
Dernière intervention
20 août 2004

Salut,

L'idee est sympa, mais tu n'utilise pas les nouveaux avantages apportes par vb.net au niveau de la programmation orientee objet, en gros t'aurais pu faire ce code en vb6 dans le meme principe.

Tu aurais pu par exemple creer une classe representant chaque "ligne" de controles, ca aurait enormement simplifie le code et la souplesse (imagine: tu dois ajouter une nouvelle colonne de controles)

voila un petit tuto pour te mettre dans l'esprit:
http://dotnet.developpez.com/tutoriels/migration/vb6_vers_dotnet/

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.