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 :

[VB 2008] Datagridview et datasource


Sujet :

VB.NET

  1. #1
    Membre éclairé Avatar de methylene
    Profil pro
    Inscrit en
    Février 2010
    Messages
    659
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Février 2010
    Messages : 659
    Points : 813
    Points
    813
    Par défaut [VB 2008] Datagridview et datasource
    Bonjour,

    Je cherche à créer une datagridview directement par le code, qui se situe dans une form elle-même contenant une tabcontrol, comme illustré ci-dessous.

    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
    Public class Form1
     
        Private WithEvents Mygrid As DataGridView
        Friend WithEvents Arbre As DataGridViewImageColumn
        Friend WithEvents Indic, Number, Task, Unit As DataGridViewTextBoxColumn
     
    Public Sub Tableau5()
     
            Me.Arbre = New DataGridViewImageColumn
            Me.Arbre.HeaderText = "Tree"
            Arbre.Width = 25
     
            Me.Indic = New DataGridViewTextBoxColumn
            Me.Indic.HeaderText = "Indice"
            Me.Indic.Width = 5
            Me.Indic.Visible = False
     
            Me.Number = New DataGridViewTextBoxColumn
            Me.Number.HeaderText = "Numéro"
            Me.Number.Width = 33
     
            Me.Task = New DataGridViewTextBoxColumn
            Me.Task.HeaderText = "Tache"
            Me.Task.Width = 440
     
            Me.Unit = New DataGridViewTextBoxColumn
            Me.Unit.HeaderText = "Unité"
            Me.Unit.Width = 50
     
            Mygrid = New DataGridView
            Me.Controls.Add(Mygrid)
            Mygrid.Parent = TabPage2
            Mygrid.Location = New Point(10, 10)
            Mygrid.Size = New Size(800, 500)
            Mygrid.ColumnHeadersVisible = False
            Mygrid.ReadOnly = True
            Mygrid.RowHeadersVisible = False
            Mygrid.AllowUserToAddRows = False
     
            Mygrid.Columns.AddRange(Me.Arbre, Me.Indic, Me.Number, Me.Task, Me.Unit)
     
            Mygrid.DataSource = bindingTS
     
            Mygrid.Columns.Item(2).DataPropertyName = "Linenumber"
            Mygrid.Columns.Item(3).DataPropertyName = "Description"
            Mygrid.Columns.Item(4).DataPropertyName = "Unit"
            Mygrid.Columns("Linenumber").Visible = False
            Mygrid.Columns("Description").Visible = False
            Mygrid.Columns("QuantityPlanning").Visible = False
            Mygrid.Columns("QuantityPapyrus").Visible = False
            Mygrid.Columns("Unit").Visible = False
            Mygrid.Columns("Avancement").Visible = False
            Mygrid.Columns("PricePers").Visible = False
            Mygrid.Columns("PriceMat").Visible = False
     
        End Sub
     
    End Class
    Screenshot :



    Il faut savoir que je bind cette datagridview à une datatable par l'intermédiaire d'une bindingsource :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
            Mygrid.DataSource = bindingTS
    Jusqu'à là pas de problème, je remplis bien mes colonnes comme affiché précédement, mais le soucis ce sont les indices des colonnes.

    En effet, je devrais avoir :
    la colonne d'indice 0 qui devrait être ma colonne "Arbre"
    la colonne d'indice 1 qui devrait être ma colonne "Indic"
    la colonne d'indice 2 qui devrait être ma colonne "Number"
    la colonne d'indice 3 qui devrait être ma colonne "Task"
    la colonne d'indice 4 qui devrait être ma colonne "Unit"

    or ce n'est pas le cas, les indices changent tout seul et mes colonnes se mélangent avec les colonnes cachées de la datasource, même si visuellement elle sont dans le bon ordre.

    Donc je ne comprend pas pourquoi je ne peux pas avoir mes colonnes en indice 0,1,2,3,4 etc, et les autres colonnes(celle de la datasource) au-delà des colonnes que j'ai créé moi-même.

    Par ailleurs existe-t-il un moyen d'attribuer le DataPropertyName directement avec la colonne souhaitée dans la datatable, sans avoir ajouter la datatable à la datasource de la datagridview.

    Pour terminer, j'ai également fait un autre essai, en créant une datagridview en mode création, ainsi que mes colonnes toujours en mode création (dans les options de la datagridview), mais j'ajoute la datasource par le code, et à ce moment là les colonnes de la datasource sont bien en indice après les indices des colonnes ajoutées par le mode création.

    Bug windows ou y a-t-il une explication ? Je pense que je dois faire quelquechose de mal, mais je n'arrive pas à trouver.

    Merci de l'aide d'avance.

  2. #2
    Membre actif

    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2007
    Messages
    51
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2007
    Messages : 51
    Points : 211
    Points
    211
    Par défaut
    Bonjour,

    Peux tu essayer de faire Columns.Clear() en premier, et ensuite d'ajouter tes colonnes comme tu l'as fait? Ensuite voir avec un espion si les indices des colonnes correspondent à l'ordre dans lequel tu les as ajoutées.

    PS: Ton screenshot ne fonctionne pas..

  3. #3
    Expert éminent Avatar de Graffito
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    5 993
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 5 993
    Points : 7 903
    Points
    7 903
    Par défaut
    Bonjour,

    L'affectation des propriétés DisplayIndex des DataGridViewColumn devrait régler le problème :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    MyGrid.Columns("Arbre").DisplayIndex=0 ;

  4. #4
    Membre éclairé Avatar de methylene
    Profil pro
    Inscrit en
    Février 2010
    Messages
    659
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Février 2010
    Messages : 659
    Points : 813
    Points
    813
    Par défaut
    Pour répondre à Pacane, le Screenshot fonctionne correctement (en tout cas chez moi), et je vais essayer de clear, on ne sait jamais.

    Et pour Graffito, le displayindex ne joue que sur l'affichage, or dans mon cas elles s'affichent correctement, ceux sont les indices qui ne sont pas bon, et cela à cause de la datatable de la datasource.

  5. #5
    Membre éclairé Avatar de methylene
    Profil pro
    Inscrit en
    Février 2010
    Messages
    659
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Février 2010
    Messages : 659
    Points : 813
    Points
    813
    Par défaut
    Voici la solution :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
           Mygrid.AutoGenerateColumns = False
    Cette ligne empêche la grid d'ajouter de nouvelles colonnes générées lorsque la propriété datasource de la grid est définie.

    Par conséquent je garde mes indices de création de colonnes.

    De plus comme dis précédemment, .displayindex change l'ordre d'affichage et .index change l'index de la colonne (désignation).

    Au final l'idée de l'espion sur la Grid et sur les colonnes m'a bien aidé, c'est comme cela que j'ai pu trouver cette propriété (autogenerate).

    Le column.clear n'a par ailleurs pas résolu mon problème.

    Merci de vos réponses, et de votre aide.

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

Discussions similaires

  1. [VB.NET] DataGridView et DataSource
    Par ricil78 dans le forum Windows Forms
    Réponses: 7
    Dernier message: 07/12/2010, 20h07
  2. C# 2008, combobox et datasource
    Par waspy59 dans le forum C#
    Réponses: 4
    Dernier message: 22/12/2009, 14h40
  3. Datagridview sans datasource
    Par olibara dans le forum Windows Forms
    Réponses: 3
    Dernier message: 16/06/2009, 13h08
  4. Remplir datagridview avec datasource
    Par lunik dans le forum Windows Forms
    Réponses: 2
    Dernier message: 16/04/2009, 16h44
  5. VS 2008 DataGridView
    Par ludojojo dans le forum Windows Forms
    Réponses: 5
    Dernier message: 10/12/2008, 17h45

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