IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VB.NET Discussion :

Remplir un datagrid à partir de plusieurs tables avec mise en forme


Sujet :

VB.NET

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    189
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 189
    Par défaut Remplir un datagrid à partir de plusieurs tables avec mise en forme
    Bonjour, voila j'aimerais à partir d'une requète qui me renvoie des infos de plusieurs table, voir même de plusieurs requètes, remplir un datagrid case par case pour ainsi faire une mise en forme moi même. Je voudrais déja savoir si c'était possible et si c'est le cas comment faire.

    d'avance merci pour votre aide

    @++
    dubidon

  2. #2
    Membre averti
    Inscrit en
    Octobre 2004
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Octobre 2004
    Messages : 15
    Par défaut
    Salut,

    Tout d'abord il me semble que tu n'as pas vraiment besoin de remplir le DataGrid case par case, il suffit de trier les champs dans l'ordre voulu dans le Select (au moins pour la 1ère requête). Ci-dessous un exemple simplifié de ce que je fais :
    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
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
     
    Public conn As SqlConnection
    Public CmdS As SqlCommand
    Public da As SqlDataAdapter
    Public ds As New DataSet()
    Dim Appli As New Excel.Application
    Public strSql As String
    Dim Ligne As DataRow
    Dim Colonne As DataColumn
    Public strConn As String = "Initial Catalog=TaBase;Data Source=TonServeur;User ID=TonUser;Password=TonMdp;"
     
    '       Requête multi-tables
    strSql = "SELECT R.ESRC_FILE, R.RC_NUM, R.PS_CODE, CU.INV_NAME, "
    strSql = strSql & "CASE WHEN R.ADDR_NUM = 0 THEN C.SIT_NAME ELSE A.CT_NAME END , "
    strSql = strSql & "CASE WHEN R.ADDR_NUM = 0 THEN C.SIT_TOWN ELSE A.CT_TOWN END , "
    strSql = strSql & "D.DWGBBSNUM, D.DWGTITLE, R.INVWEIGHT, R.DELIVASKED, R.CUST_REF, "
    strSql = strSql & "B.TYWO_CODE, D.PROD_NUM, E.INV_WGHT, E.STATUS FROM DWGBBS AS D "
    strSql = strSql & "JOIN REF_PS AS R ON R.ESRC_FILE = D.ESRC_FILE AND R.RC_NUM = D.RC_NUM AND R.PS_TITLE = D.DWGBBSNUM "
    strSql = strSql & "JOIN CONTRACT AS C ON C.ESRC_FILE = D.ESRC_FILE AND C.RC_NUM = D.RC_NUM "
    strSql = strSql & "LEFT JOIN CONTRADR AS A ON A.ESRC_FILE = D.ESRC_FILE AND A.ES_NUM = D.ES_NUM AND A.SEQ_NUM = R.ADDR_NUM "
    strSql = strSql & "JOIN CUSTOMER AS CU ON CU.CUST_CODE = C.CUST_CODE "
    strSql = strSql & "JOIN ELEMENT AS E ON E.ESRC_FILE = R.ESRC_FILE AND E.RC_NUM = R.RC_NUM AND E.PROD_NUM = D.PROD_NUM " 'AND E.STATUS = '0' "
    strSql = strSql & "LEFT JOIN BARGEN AS B ON B.ESRC_FILE = R.ESRC_FILE AND B.RC_NUM = R.RC_NUM AND B.PROD_NUM = D.PROD_NUM AND B.ELT_NUM = E.ELT_NUM AND B.BAR_NUM = '1'"
    strSql = strSql & "WHERE R.DELIVASKED BETWEEN '" & DateDebut & "' AND '" & DateFin & "' AND D.RC_NUM <> 1 ORDER BY R.DELIVASKED, CU.INV_NAME, R.PS_CODE, E.STATUS"
     
    '       Connexion à SQL et chargement DataSet
    conn = New SqlConnection(strConn)
    conn.Open()
    CmdS = New SqlCommand(strSql)
    da = New SqlDataAdapter(CmdS)
    CmdS.Connection() = conn
    da.Fill(ds, "REF_PS")
     
    '       Noms des colonnes du DataGrid
    NomCol(0) = "DOSSIER"
    NomCol(1) = "N° CLIENT"
    NomCol(2) = "SÉQUENCE"
    NomCol(3) = "NOM CLIENT"
    NomCol(4) = "CHANTIER"
    NomCol(5) = "LOCALITÉ CHANTIER"
    NomCol(6) = "N° LISTE INGÉNIEUR"
    NomCol(7) = "TITRE PLAN"
    NomCol(8) = "POIDS (KG)"
    NomCol(9) = "DATE LIVRAISON"
    NomCol(10) = "S/D"
     
    '       Manipulation des données (ici format de la date)
    With ds.Tables("REF_PS")
                For i = 0 To .Rows.Count - 1
                    DateForm = .Rows(i).Item("DELIVASKED")
                    JJ = DateForm.Substring(6, 2)
                    MM = DateForm.Substring(4, 2)
                    AA = DateForm.Substring(0, 4)
                    DateForm = JJ & "/" & MM & "/" & AA
                    .Rows(i).Item("DELIVASKED") = DateForm
                Next
    End With
     
    '       Renommer les entêtes de colonnes du DataSet
    '       Count - 5 car certaines données seront supprimées
    With ds.Tables("REF_PS")
                For i = 0 To .Columns.Count - 5
                    .Columns(i).ColumnName = NomCol(i)
                Next
    End With
     
    '       Suppression des colonnes utiles pour manipulation des données
    '       mais inutiles à l'affichage
    With ds.Tables("REF_PS")
                .Columns.Remove("TYWO_CODE")
                .Columns.Remove("PROD_NUM")
                .Columns.Remove("INV_WGHT")
                .Columns.Remove("STATUS")
    End With
     
    '       Chargement du DataGrid depuis le DataSet
    Dim Vue As New DataView(ds.Tables("REF_PS"))
    DataGridView1.DataSource = Vue
    Pour ce qui est d'un remplissage case par case, tu peux t'inspirer de ceci :
    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
     
    '   Afficher dans Datagrid 
    With DataGridView1
                '   Position, Qté, diamètre, forme
                For i = 0 To 3
                    .Rows(DerRow).Cells(i).Value = PosAC(DerRow, i)
                Next
                '   1ère Cote
                .Rows(DerRow).Cells(4).Value = PosCote(DerRow, 2)
    End With
     
    '       Ajouter une ligne dans le DataGrid
    Form1.DataGridView1.Rows.Add(1)
     
    '   Décaler la position courante une ligne vers le haut et vider (rows.add insère une ligne avant)
    For i = 0 To "Nombre colonnes - 1"
                With DataGridView1
                    .Rows(DerRow - 1).Cells(i).Value = .Rows(DerRow).Cells(i).Value
                    .Rows(DerRow).Cells(i).Value = ""
                End With
    Next
    '       Cellule active
    DataGridView1.CurrentCell = DataGridView1.Rows(DerRow - 1).Cells(0)
    Je précise que je suis sous VB2005.

    Avec l'espoir que cela te servira, bonne prog.
    dp

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    189
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 189
    Par défaut
    Merci a toi, je suis aussi sous vb.net 2005. Je vais regader les exemples de code que tu m'as fourni et si j'ai des problèmes je te fais signe

    merci

    @++
    dubidon

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 12
    Dernier message: 01/09/2010, 14h00
  2. Réponses: 2
    Dernier message: 11/04/2007, 12h14
  3. Réponses: 6
    Dernier message: 19/05/2006, 14h22
  4. Réponses: 19
    Dernier message: 13/03/2006, 13h06
  5. [SUM] récuperer une quantite a partir de plusieurs table
    Par Snowballz dans le forum PostgreSQL
    Réponses: 9
    Dernier message: 14/09/2004, 18h48

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo