Problèmede colonnes auto générées dans un datagridview [Résolu]

Doro81079 398 Messages postés vendredi 22 avril 2005Date d'inscription 24 février 2015 Dernière intervention - 24 janv. 2015 à 02:02 - Dernière réponse : Doro81079 398 Messages postés vendredi 22 avril 2005Date d'inscription 24 février 2015 Dernière intervention
- 25 janv. 2015 à 15:08
Bonsoir,

Depuis peu je me remet à coder, passant de Vb.Net 2003 à Vb.Net 2010 c'est pas simple...

Ce qui marchait sur l'un ne marche plus sur l'autre.

Donc voilà mon souci :

Je passe par un dataset pour récupérer des données dans une bdd access que j'affiche dans un datagridview.

Avec 2003 c'était :

DataGridView1.DataSource = dts.Tables("ma table")

Avec 2010 j'ai trouvé ça :

Me.DataGridView1.DataSource = dts
Me.DataGridView1.DataMember = dts.Tables(0).TableName

Ça marche nickel sauf que j'ai d'un côté mes belles colonnes avec leur nom d'en-tête que j'ai créé mais sans donnée et à côté une autre série de colonne qui cette fois ont les noms des champs de ma table, donc sans accent, sans espace, sans majuscule.

J'ai essayé ça ça marche pas :

Me.DataGridView1.AutoGenerateColumns = False

J'ai cherché, cherché, cherché et encore cherché....

Donc j'ai 2 questions :

Quelqu'un aurait il la bonté de m'aider ?

Ou j'oublie .net 2010 et je repasse sur 2003 ?

Merci par avance...
Afficher la suite 

Votre réponse

5 réponses

ucfoutu 18039 Messages postés lundi 7 décembre 2009Date d'inscriptionModérateurStatut 11 avril 2018 Dernière intervention - Modifié par ucfoutu le 24/01/2015 à 07:30
0
Utile
Bonjour,
Je ne suis pas VB.Nettiste et risque donc de dire une bêtise.
On ne voit pas, dans tes explications, où tu as écrit Me.DataGridView1.AutoGenerateColumns = False.
Avant, ou après la déclaration de DataSource ?
D'instinct, il me semble qu'il faut commencer par mettre à false AutoGenerateColumns, PUIS faire la déclaration de Datasource.
Essaye.

EDIT : ça semble être ce que je t'en ai dit plus haut.
Regarde le dernier code VB.Net sur cette page, que je viens de trouver :
http://www.aspsnippets.com/Articles/Bind-Fill-DataGridView-in-Windows-Forms-WinForms-Application-in-C-and-VBNet.aspx

________________________
Réponse exacte ? => "REPONSE ACCEPTEE" facilitera les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement répéter son contenu. Je n'interviend
Commenter la réponse de ucfoutu
Doro81079 398 Messages postés vendredi 22 avril 2005Date d'inscription 24 février 2015 Dernière intervention - 24 janv. 2015 à 15:16
0
Utile
Bonjour,

Merci pour ton aide.

Oui je l'avais bien mis avant donc là j'ai testé avec le lien que tu m'as donné.

Avant j'avais ça :

' visualiser la table avec datagridview
Me.DataGridView1.AutoGenerateColumns = False
Me.DataGridView1.DataSource = dts
Me.DataGridView1.DataMember = dts.Tables(0).TableName

Et les colonnes créées dans l'éditeur de propriétés ( Column collection)

Donc colonnes générées automatiquement plus les colonnes de l'éditeur.

Maintenant j'ai supprimé les colonnes de l'éditeur, le datagrid est vide au load de la form et je les crée dans le code comme ceci :

' visualiser la table avec datagridview
Me.DataGridView1.AutoGenerateColumns = False

'Nombres de colonnes
Me.DataGridView1.ColumnCount = 3

'Création des colonnes
Me.DataGridView1.Columns(0).Name = "cref"
Me.DataGridView1.Columns(0).HeaderText = "Référence"
Me.DataGridView1.Columns(0).DataPropertyName = "reference"

Me.DataGridView1.Columns(1).Name = "cuniv"
Me.DataGridView1.Columns(1).HeaderText = "Univers"
Me.DataGridView1.Columns(1).DataPropertyName = "univers"

Me.DataGridView1.Columns(2).Name = "cgamme"
Me.DataGridView1.Columns(2).HeaderText = "Gamme"
Me.DataGridView1.Columns(2).DataPropertyName = "gamme"


Me.DataGridView1.DataSource = dts
Me.DataGridView1.DataMember = dts.Tables(0).TableName

ça marche et au bout de la 3 ème recherche ça plante sur :

Me.DataGridView1.ColumnCount = 3

Avec ce message d'erreur :

Impossible de définir la propriété ColumnCount sur un contrôle DataGridView lié aux données.
--
Commenter la réponse de Doro81079
ucfoutu 18039 Messages postés lundi 7 décembre 2009Date d'inscriptionModérateurStatut 11 avril 2018 Dernière intervention - Modifié par ucfoutu le 24/01/2015 à 19:42
0
Utile
Cela me parait normal, puisque les propriétés (dont Datasource) de ta grid restent valables entre deux requêtes). Ta grille reste donc liée dès la première requête avec liaison.
Tu devrais donc à mon sens :
1) la libérer par
dataGridView1.DataSource = null (ou peut-être Nothing - connais par VB.Net - à toi de voir)
puis
2) modifier ses propriétés ColumnCount= # et AutoGenerateColumns = False
puis
3) ton code de liaison et de peuplement de ta grille


PS : maintenant : si le nombre de tes colonnes doit toujours être égal à 3 ==>> il te suffit, ma foi, de ne plus toucher à cette propriété, genre :
If Me.DataGridView1.ColumnCount <> 3 then 
Me.DataGridView1.ColumnCount = 3
End If

Et idem pour toutes les propriétés qui cessent d'être accessibles en écriture lorsque la grille est liée.
________________________
Réponse exacte ? => "REPONSE ACCEPTEE" facilitera les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement répéter son contenu. Je n'interviend
Commenter la réponse de ucfoutu
Doro81079 398 Messages postés vendredi 22 avril 2005Date d'inscription 24 février 2015 Dernière intervention - 24 janv. 2015 à 20:48
0
Utile
J'ai laissé tombé et mis les colonnes en auto, pas mal de choses à coder plus importante mais je pense que tu as raison, je vais tester et vous tiens au courant :)

Merci.

--
Commenter la réponse de Doro81079
Doro81079 398 Messages postés vendredi 22 avril 2005Date d'inscription 24 février 2015 Dernière intervention - 25 janv. 2015 à 15:08
0
Utile
Bonjour,

C'était bien ça. :)

Donc pour ne pas remettre tout mon code, j'ai fait comme ceci :

Dans la procédure du bouton qui recherche dans ma bdd et qui affiche les données du dataset dans la datagridview :


'Pour vider le dataset d'une recherche précédente
Dts.clear 

'Libérer le datagridview d'une recherche précédente
Me.Datagridview1.Datasource = Nothing 

'Condition de recherche avec requête sql,exécution de la commande, remplissage du DataAdapter, du DataSet et de la DataTable

'Si recherche ok avec données à afficher, création des colonnes et affichage dans le datagridview

Me.DataGridView1.AutoGenerateColumns = False

'Set Columns Count
Me.DataGridView1.ColumnCount = 2

'Add(Columns)
Me.DataGridView1.Columns(0).Name = "cref"
Me.DataGridView1.Columns(0).HeaderText = "Référence"
Me.DataGridView1.Columns(0).DataPropertyName = "reference"

Me.DataGridView1.Columns(1).Name = "cuniv"
Me.DataGridView1.Columns(1).HeaderText = "Univers"
Me.DataGridView1.Columns(1).DataPropertyName = "univers"


Me.DataGridView1.DataSource = dts
Me.DataGridView1.DataMember = dts.Tables(0).TableName


Donc mes colonnes sont crées dans l'éditeur de propriétés pour être afficher au load de la form et elles sont recrées ensuite par le code sans se dédoubler.

Merci Ucfoutu.

--
Commenter la réponse de Doro81079

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.