Problèmede colonnes auto générées dans un datagridview

Résolu
Doro81079 Messages postés 380 Date d'inscription vendredi 22 avril 2005 Statut Membre Dernière intervention 24 février 2015 - 24 janv. 2015 à 02:02
Doro81079 Messages postés 380 Date d'inscription vendredi 22 avril 2005 Statut Membre Dernière intervention 24 février 2015 - 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...

5 réponses

ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
Modifié par ucfoutu le 24/01/2015 à 07:30
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
0
Doro81079 Messages postés 380 Date d'inscription vendredi 22 avril 2005 Statut Membre Dernière intervention 24 février 2015 56
24 janv. 2015 à 15:16
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.
--
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
Modifié par ucfoutu le 24/01/2015 à 19:42
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
0
Doro81079 Messages postés 380 Date d'inscription vendredi 22 avril 2005 Statut Membre Dernière intervention 24 février 2015 56
24 janv. 2015 à 20:48
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.

--
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Doro81079 Messages postés 380 Date d'inscription vendredi 22 avril 2005 Statut Membre Dernière intervention 24 février 2015 56
25 janv. 2015 à 15:08
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.

--
0
Rejoignez-nous