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

ASP.NET Discussion :

[VB.NET] datagrid & textbox/liste déroulante


Sujet :

ASP.NET

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    89
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 89
    Par défaut [VB.NET] datagrid & textbox/liste déroulante
    Bonjour ,

    J'ai créer un datagrid qui reprend toutes mes informations , et j'aimerai ajouter une données pour chaque ligne pour la colonne fournisseur(voir photo) . j'aimerai donc que cette colonne soit , une textbox ou plutôt une liste déroulante...

    La taille du datagrid étant variable chaque jour , je ne peut pas les ajouter manuellement... Je cherche donc une solution dynamique pour ensuite l'ajouter dans ma base de données...

    Merci d'avance

    Nom : Sans titre.PNG
Affichages : 178
Taille : 12,3 Ko

  2. #2
    Membre expérimenté
    Avatar de zooffy
    Homme Profil pro
    Chef de projet MOA
    Inscrit en
    Août 2004
    Messages
    3 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Chef de projet MOA
    Secteur : Bâtiment

    Informations forums :
    Inscription : Août 2004
    Messages : 3 895
    Par défaut
    Salut

    Je suis pas encore trés calé sur la manipulation de ces objets là, mais je sais que tu peux ajouter des colonnes à un DataGrid par code.

    Il faut que tu cherche dans la MSDN vers un truc qui fait monDataGrid.Column.add.
    Tu trouveras tous les éléments pour ajouter des colonnes fabriquée ou changer l'aspect des colonnes existantes.

    Tu pourras même ajouter des colonnes qui ne correspondent pas aux données venant de la BDD.

    Cherche également du côté de ta source : ton DataGrid dispose d'une propriété DataSource. Il faut voir comment tu fabriques cette source et modifier en conséquence avant de faire le fameux DataBind de ton DataGrid.

    Pour plus de détail, essaie et envoi du code si tu n'y arrive pas.

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    89
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 89
    Par défaut
    Désolé , mais ca ne marche pas ... j'ai essayé , mais en ajoutant une colonne, je ne peut pas y associer une textbox...Merci quand même

    Quelqu'un aurait une idée ou un contournement de ma situation...

    Merci

  4. #4
    Membre confirmé Avatar de Azephel
    Inscrit en
    Février 2007
    Messages
    141
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Février 2007
    Messages : 141
    Par défaut
    Salut !
    Va dans le "générateur de propriétés" de ton datagrid. Dans la section colonnes, tu as moyens d'ajouter une colonne modèle. Ensuite tu as juste à faire "Modifier les modèles" et d'ajouter une textbox ou une dropdownlist dans ta colonne. Tu termines la modification des modèles et hop, tu as une colonnes de textbox (ou dropdownlist).

    Dans le code, tu peux le récupérer comme suis :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Dim dgi As DataGridItem
    Dim Fournisseur As String
            For Each dgi In TonDatagrid.Items
               Fournisseur = Ctype(dgi.FindControl("LeNomDeLaTextBoxDansLaColonneModele"), TextBox).Text
    'Dans le cas d'une DropDownList :
    Ctype(dgi.FindControl("LeNomDeLaDropDownListDansLaColonneModele"), DropDownList).SelectedValue
            Next
    J'espère t'avoir aidé !

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    89
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 89
    Par défaut
    Merci Azephel , c'est exactement ce que je voulais faire... Malheuresement, je n'arrive pas a récupérer la bonne valeur de ma DropDownList... Je récupére toujours la première valeur qui lui est contenu...

    J'ai repris exactement le même code que tu avais cité au dessus...

    As tu une idée sur l'origine du problème?

    Merci

    EDIT : J'ai essayé en activant les postbacks , mais aprés il m'indique que ma liste est vide...

  6. #6
    Membre confirmé Avatar de Azephel
    Inscrit en
    Février 2007
    Messages
    141
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Février 2007
    Messages : 141
    Par défaut
    La dernière fois que j'ai eu un probleme du genre, c'était parce que j'avais un databind du datagrid dans le load. Du coup, toutes les valeurs revenaient à celles d'origine.

    Regarde si tu ne fais pas un databind de ton datagrid avant ta validation (genre dans le load ou juste avant), ou alors un databind de ton dropdownlist (en supposant que ta DropDownList est liée à une base). Si c'est le cas, met le databind dans un bloc If Not IsPostBack

    J'espère que ça va résoudre ton problème !

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    89
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 89
    Par défaut
    Justement il est dans mon load

    voila mon code de la page load
    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
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
            MyConnection.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data source='C:\Documents and Settings\bdd.mdb'"
     
            MyConnection.Open()
            Dim MyAdapter2 As OleDb.OleDbDataAdapter
            Dim requete2 As String = "select nomfournisseur from fournisseur"
            Dim MyCommand2 As OleDb.OleDbCommand
            MyCommand2 = New OleDb.OleDbCommand(requete2, MyConnection)
            MyAdapter2 = New OleDb.OleDbDataAdapter(MyCommand2)
            Dim acmdbuilder As New OleDb.OleDbCommandBuilder(MyAdapter2)
            MyAdapter2.Fill(DataSet1, "fournisseur")
            MyConnection.Close()
     
            i = 0
     
            MyConnection.Open()
            Dim MyAdapter As OleDb.OleDbDataAdapter
            Dim requete As String = "select nlfbi,NomClient, Quantite,Type,dimension,fournisseur from cmd_fournisseur order by Type"
            Dim MyCommand As OleDb.OleDbCommand
            MyCommand = New OleDb.OleDbCommand(requete, MyConnection)
     
     
            Dim dr As OleDb.OleDbDataReader
            dr = MyCommand.ExecuteReader
     
     
            DataGrid2.DataSource = dr
                  DataGrid2.BorderColor = Color.Black
            DataGrid2.CellPadding = 3
            DataGrid2.CellSpacing = 0
            DataGrid2.HeaderStyle.ForeColor = Color.Black
            DataGrid2.HeaderStyle.HorizontalAlign = HorizontalAlign.Center
            DataGrid2.HeaderStyle.BackColor = Color.FromName("FFCC33")
            DataGrid2.AutoGenerateColumns = False
            DataGrid2.AlternatingItemStyle.BackColor = Color.FromName("FFFF99")
            DataGrid2.HorizontalAlign = HorizontalAlign.Center
     
            Dim colfbi As New BoundColumn
            Dim colqte As New BoundColumn
            Dim colNomClient As New BoundColumn
            Dim coltype As New BoundColumn
            Dim coldimension As New BoundColumn
     
     
            colfbi.DataField = "nlfbi"
            colfbi.HeaderText = "Numero de fabrication"
            colfbi.HeaderStyle.Width = Unit.Pixel(150)
            colfbi.HeaderStyle.Font.Bold = True
            colfbi.HeaderStyle.HorizontalAlign = HorizontalAlign.Center
            colfbi.ItemStyle.HorizontalAlign = HorizontalAlign.Center
            DataGrid2.Columns.Add(colfbi)
     
     
     
            colqte.DataField = "Quantite"
            colqte.HeaderText = "Quantite"
            colqte.HeaderStyle.Width = Unit.Pixel(50)
            colqte.HeaderStyle.Font.Bold = True
            colqte.HeaderStyle.HorizontalAlign = HorizontalAlign.Center
            colqte.ItemStyle.HorizontalAlign = HorizontalAlign.Center
            DataGrid2.Columns.Add(colqte)
     
            colNomClient.DataField = "NomClient"
            colNomClient.HeaderText = "Nom Client"
            colNomClient.HeaderStyle.Width = Unit.Pixel(600)
            colNomClient.HeaderStyle.Font.Bold = True
            colNomClient.HeaderStyle.HorizontalAlign = HorizontalAlign.Center
            colNomClient.ItemStyle.HorizontalAlign = HorizontalAlign.Center
            DataGrid2.Columns.Add(colNomClient)
     
            coltype.DataField = "Type"
            coltype.HeaderText = "Type"
            coltype.HeaderStyle.Width = Unit.Pixel(250)
            coltype.HeaderStyle.Font.Bold = True
            coltype.HeaderStyle.HorizontalAlign = HorizontalAlign.Center
            coltype.ItemStyle.HorizontalAlign = HorizontalAlign.Center
            DataGrid2.Columns.Add(coltype)
     
            coldimension.DataField = "dimension"
            coldimension.HeaderText = "Dimension"
            coldimension.HeaderStyle.Width = Unit.Pixel(90)
            coldimension.HeaderStyle.Font.Bold = True
            coldimension.HeaderStyle.HorizontalAlign = HorizontalAlign.Center
            coldimension.ItemStyle.HorizontalAlign = HorizontalAlign.Center
            DataGrid2.Columns.Add(coldimension)
     
              DataGrid2.DataBind()
     
            MyConnection.Close()
    Ensuite je clique sur un bouton pour enregistrer mes valeurs dans une table ...

    code du bouton :
    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
            Dim dgi As DataGridItem
            Dim Fournisseur As String
            Dim nlfbi As String
            Dim dr As OleDb.OleDbDataReader
     
            MyConnection2.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data source='C:\Documents and Settings\stagiaire.info\Mes documents\Visual Studio Projects\Automatisation_palettes\bdd.mdb'"
            MyConnection2.Open()
            Dim requete2 As String = "select nlfbi from cmd_fournisseur order by nlfbi"
            Dim MyCommand2 As OleDb.OleDbCommand
            MyCommand2 = New OleDb.OleDbCommand(requete2, MyConnection2)
            dr = MyCommand2.ExecuteReader
     
            While dr.Read()
                tabnlfbi(i) = dr.Item(0)
                i = i + 1
                ReDim Preserve tabnlfbi(i)
            End While
            dr.Close()
            i = 0
            MyConnection2.Close()
            For Each dgi In DataGrid2.Items
                'Dans le cas d'une DropDownList :
                Fournisseur = CType(dgi.FindControl("DropDownList1"), DropDownList).SelectedValue.ToString
                MyConnection.Open()
                Dim MyCommand3 As OleDb.OleDbCommand
     
                Response.Write(String.Format("<script>alert(""{0}"");</script>", Fournisseur))
     
                Dim requete3 As String = "UPDATE cmd_fournisseur set  fournisseur ='" & Fournisseur & "' where nlfbi ='" & tabnlfbi(i) & "'"
                MyCommand3 = New OleDb.OleDbCommand(requete3, MyConnection)
                MyCommand3.ExecuteReader()
                MyConnection.Close()
                i = i + 1
            Next
    J'avais essayé avec le isPostBack , mais ca marche mais si je met le if qui englobe toute ma page load , et le datagrid comportant les autres informations n'y sont plus, en revanche , les fournisseurs sont biens enregistrés comme je le souhaite...

    J'espere avoir été clair...

  8. #8
    Membre confirmé Avatar de Azephel
    Inscrit en
    Février 2007
    Messages
    141
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Février 2007
    Messages : 141
    Par défaut
    Essaye en mettant juste le databind dans le if not ispostback :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    If Not IsPostBack Then
    DataGrid2.DataBind()
    End If
    Je vais décortiquer un peu plus ton code en tout cas, pour voir d'éventuelles autres possibilités de solution.

    Bon courage !

  9. #9
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    89
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 89
    Par défaut
    Il effectue la meme chose... c'est à dire que la colonne fournisseur reste présente , mais le reste ne s'affiche pu...

    Merci de l'attention que tu porte a mon problème...

  10. #10
    Membre confirmé Avatar de Azephel
    Inscrit en
    Février 2007
    Messages
    141
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Février 2007
    Messages : 141
    Par défaut
    Tu utilises une base access, non ?

  11. #11
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    89
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 89
    Par défaut
    Oui.

    Mais le problème ne vient pas de la puisque j'arrive a les enregistrer sans probleme...

  12. #12
    Membre confirmé Avatar de Azephel
    Inscrit en
    Février 2007
    Messages
    141
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Février 2007
    Messages : 141
    Par défaut
    Oui je m'en doute ^^
    C'était simplement pour savoir ^^

    On s'y retrouverai mieux si tu allégeais ton code, genre créer (en mode Design) un AccessDataSource que tu configure comme il faut, sans oublier de mettre le nom de l'AccessDataSource dans la propriété DataSourceId du DataGrid. Ca ferait déjà sauter ta connexion.
    Ensuite toujours en mode Design, tu peux créer tes colonnes dépendantes dans le générateur de propriétés. Un petit assistant bien sympa. Sans oublier de définir le champ de données. Ca, ça ferait sauter tes créations de colonnes dans le code. Et en fouinant tu dois avoir moyen de définir le reste toujours dans le générateur de propriétés.

    A la fin, ton code devrait être super épuré.


    Et je viens de remarquer un truc :
    au click sur le bouton, tu as ça :
    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
     Dim dgi As DataGridItem
            Dim Fournisseur As String
            Dim nlfbi As String
            Dim dr As OleDb.OleDbDataReader
     
            MyConnection2.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data source='C:\Documents and Settings\stagiaire.info\Mes documents\Visual Studio Projects\Automatisation_palettes\bdd.mdb'"
            MyConnection2.Open()
            Dim requete2 As String = "select nlfbi from cmd_fournisseur order by nlfbi"
            Dim MyCommand2 As OleDb.OleDbCommand
            MyCommand2 = New OleDb.OleDbCommand(requete2, MyConnection2)
            dr = MyCommand2.ExecuteReader
     
            While dr.Read()
                tabnlfbi(i) = dr.Item(0)
                i = i + 1
                ReDim Preserve tabnlfbi(i)
            End While
            dr.Close()
            i = 0
            MyConnection2.Close()
            For Each dgi In DataGrid2.Items
                'Dans le cas d'une DropDownList :
                Fournisseur = CType(dgi.FindControl("DropDownList1"), DropDownList).SelectedValue.ToString
                MyConnection.Open()
                Dim MyCommand3 As OleDb.OleDbCommand
     
                Response.Write(String.Format("<script>alert(""{0}"");</script>", Fournisseur))
     
                Dim requete3 As String = "UPDATE cmd_fournisseur set  fournisseur ='" & Fournisseur & "' where nlfbi ='" & tabnlfbi(i) & "'"
                MyCommand3 = New OleDb.OleDbCommand(requete3, MyConnection)
                MyCommand3.ExecuteReader()
                MyConnection.Close()
                i = i + 1
            Next
    Je suppose que le code de fabrication est nlfbi. Tu exécute une requête afin de récupérer tout les numéros de fabrication que tu met dans un tableau.
    Essaye plutôt en faisant comme ça :
    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
    Dim dgi As DataGridItem
            Dim Fournisseur As String
            Dim nlfbi As String
    Dim dt As New Label
            For Each dgi In DataGrid2.Items
                'Dans le cas d'une DropDownList :
                Fournisseur = CType(dgi.FindControl("DropDownList1"), DropDownList).SelectedValue.ToString
    'Si ta première colonne est bien le numéro de fabrication (je crois que c'est le cas)
    dt.Text=dgi.cells(0).Text 'récupère le numéro de fabrication dans le datagrid
                MyConnection.Open()
                Response.Write(String.Format("<script>alert(""{0}"");</script>", Fournisseur))
     
                Dim requete3 As String = "UPDATE cmd_fournisseur set  fournisseur ='" & Fournisseur & "' where nlfbi =" & dt.text
                MyCommand3 = New OleDb.OleDbCommand(requete3, MyConnection)
                MyCommand3.ExecuteNonQuery() 'Attention, ici ce n'est pas la méthode ExecuteReader, étant donné que le requête ne renvoie rien
                MyConnection.Close()
            Next
    J'espère que ça ira !

  13. #13
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    89
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 89
    Par défaut
    Je sais pas pourquoi mais je suis revenu comme au départ en enlevant les postback et ca a marché alors que ca ne marchaiit pas..

    Enfin dirais-je!

    Jte remercie beaucoup , tu y es pour quelque chose ! Deux jours que je lutte pour ca... mercii !!

  14. #14
    Membre confirmé Avatar de Azephel
    Inscrit en
    Février 2007
    Messages
    141
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Février 2007
    Messages : 141
    Par défaut
    Erf !
    Ca m'arrive aussi des fois. Le pire c'est quand ça marche, tu le met en production et c'est la que ça marche pas. Le chef n'est jamais très heureux dans ce cas-là...

    En tout cas bon courage pour la suite !

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

Discussions similaires

  1. [ASP.NET MVC2] [C#] Problème liste déroulante
    Par Eklundh dans le forum ASP.NET MVC
    Réponses: 0
    Dernier message: 24/01/2011, 16h14
  2. Réponses: 2
    Dernier message: 20/11/2006, 14h35
  3. [VB.NET].saisie progressive dans zone liste déroulante
    Par LE VIEUX dans le forum Windows Forms
    Réponses: 10
    Dernier message: 27/09/2006, 13h21
  4. Afficher la valeur choisie d'une liste déroulante dans une textbox
    Par bouchette63 dans le forum Balisage (X)HTML et validation W3C
    Réponses: 3
    Dernier message: 20/06/2006, 14h26
  5. [VB6]Créer une liste déroulante dans une dataGrid
    Par mcay dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 11/05/2006, 09h32

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