Problème avec le DataGrid [Résolu]

Calade 1212 Messages postés dimanche 20 avril 2003Date d'inscription 4 juin 2016 Dernière intervention - 8 oct. 2011 à 10:20 - Dernière réponse : LIBRE_MAX 1403 Messages postés mardi 1 mai 2007Date d'inscription 7 octobre 2012 Dernière intervention
- 8 oct. 2011 à 18:03
Bonjour,

Je rencontre un problème récurrent avec le contrôle DataGrid.
Pour que l'on soit bien d'accord il s'agit dans la liste des composants de l'IDE VB6 de:
Microsoft DataGrid Control 6.0 (SP6) (OLEDB) et situé dans C:\Windows\System32\MSDATGRD.OCX (sur un système Windows XP). J'utilise celui-ci car il est bien moins lourd (même si bien moins souple) que le MSHFlexGrid.

Je l'utilise toujours en solo, c'est à dire sans aucun composant qui lui soit lié et je lie les donnés par l'intermédiaire d'un Recordset avec sa propriété DataSource (je travaille avec SQL Server et ADO 2.8)

La plupart du temps, je définis ces champs par l'intermédiaire des pages de propriété et je n'ai pas de problème particulier.

Par contre quand je veux lui affecter les champs par le code, rien ne va plus.
je fais toujours un
Set myDataGrid.DataSource = myRecordset
mais à partir de là, toute tentative de lui imposer certains champs plutôt que d'autres, que ce soit ou non après un .ClearFields est totalement ignoré (uniquement par code je le répète, il n'y a pas de problèmes avec les pages de propriété).

Question: Cela est-il possible avec ce contrôle et si oui, qu'est que j'ai loupé ? ou bien faut-il que je j'utilise un autre OCX (MSHFlexGrid, SCGrid, etc...), lequel serait le mieux à votre avis ?

Merci d'avance.


Calade
Afficher la suite 

Votre réponse

12 réponses

Meilleure réponse
LIBRE_MAX 1403 Messages postés mardi 1 mai 2007Date d'inscription 7 octobre 2012 Dernière intervention - 8 oct. 2011 à 16:39
3
Merci
Désolé pour cette interruption.
Pause déjeuner oblige.

Essayer un refresh.

Set myDataGrid.DataSource = myRecordset
myDataGrid.Refresh [] Ce qui va sans dire. va mieux en le disant.

Merci LIBRE_MAX 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 85 internautes ce mois-ci

Commenter la réponse de LIBRE_MAX
LIBRE_MAX 1403 Messages postés mardi 1 mai 2007Date d'inscription 7 octobre 2012 Dernière intervention - 8 oct. 2011 à 13:22
0
Merci
Bonjour,

lui imposer certains champs plutôt que d'autres..Qu' entends-tu par là ?

Ton DataGrid étant lié à une source (table ou requete),tu ne peux qu' agir sur certaines propriétés.Tel que :
Visible, Looked, Format, Width, etc.

Est-ce ça ?
[] Ce qui va sans dire. va mieux en le disant.
Commenter la réponse de LIBRE_MAX
Calade 1212 Messages postés dimanche 20 avril 2003Date d'inscription 4 juin 2016 Dernière intervention - 8 oct. 2011 à 13:28
0
Merci
Bonjour,

Et merci de ta réponse.

Non ce n'est pas ça. Ma grid est en effet reliée à une source, mais ne voulant pas afficher TOUS les champs de mon recordset, je veux sélectionner ceux désirés.

Par les pages de propriété, donc en mode design, pas de problème.

Par contre dans le code (par ex:)
grid.columns(0).DataField = Field1
grid.columns(1).DataField = Field5
grid.columns(2).DataField = Field3

cela ne marche pas (je peux par contre modifier par code des propriétés des champs définis par la 1ère méthode).

Calade
Commenter la réponse de Calade
LIBRE_MAX 1403 Messages postés mardi 1 mai 2007Date d'inscription 7 octobre 2012 Dernière intervention - 8 oct. 2011 à 14:16
0
Merci
j' ai jamais procèdé ainsi, mais peut être que
tu dois instancier tes colonnes en tant qu' objets Column.

Dim cCol0 As Column,cCol1 As Column,_
cCol2 As Column

Set cCol0=grid.columns(0)
Set cCol1=grid.columns(1)
Set cCol2=grid.columns(2)

cCol0.DataField=Field1
cCol1.DataField=Field2
cCol2.DataField=Field3


[] Ce qui va sans dire. va mieux en le disant.
Commenter la réponse de LIBRE_MAX
LIBRE_MAX 1403 Messages postés mardi 1 mai 2007Date d'inscription 7 octobre 2012 Dernière intervention - 8 oct. 2011 à 14:20
0
Merci
voir aussi:

cCol0.DataField=rs.Fields(1)
cCol1.DataField=rs.Fields(2)
cCol2.DataField=rs.Fields(3)


[] Ce qui va sans dire. va mieux en le disant.
Commenter la réponse de LIBRE_MAX
Calade 1212 Messages postés dimanche 20 avril 2003Date d'inscription 4 juin 2016 Dernière intervention - 8 oct. 2011 à 14:59
0
Merci
1er Essai:
Dim oCol As Column

Set oCol = DGGrid.Columns(X)
oCol.DataField = GridColumns(X).FieldName
'Tableau de string contenant le nom des champs désirés
DGGrid.Columns(X) = oCol
--> Erreur 6147, Colonne Introuvable "|1"
si la propriété DataSource n'a pas de valeur, j'obtiens une erreur 7005 (Jeu d'enregistrements indisponibles), j'ai vérifié le recordset est OK.

2ème essai:
Set oCol = DGGrid.Columns(X)
oCol.DataField = rst.Field(x)
DGGrid.Columns(X) = oCol
--> Erreur 6147, Colonne Introuvable "|1"
si la propriété DataSource n'a pas de valeur, j'obtiens une erreur 7005

3ème essai:
DGGrid.Columns(X) = p_rstItems.Fields(X)
--> Erreur 6147, Colonne Introuvable "|1"
si la propriété DataSource n'a pas de valeur, j'obtiens une erreur 7005

dans tous les exemples ci-dessus, X = 0 (c'est un extrait de boucle et c'est la 1ère fois que j'y passe).

Calade
Commenter la réponse de Calade
LIBRE_MAX 1403 Messages postés mardi 1 mai 2007Date d'inscription 7 octobre 2012 Dernière intervention - 8 oct. 2011 à 14:59
0
Merci
Pendant que j' y pense.
Pourquoi ne pas avoir comme source de données,
une requete renvoyant les Fields voulus, dans la
disposition voulue ?

[] Ce qui va sans dire. va mieux en le disant.
Commenter la réponse de LIBRE_MAX
Calade 1212 Messages postés dimanche 20 avril 2003Date d'inscription 4 juin 2016 Dernière intervention - 8 oct. 2011 à 15:07
0
Merci
Parce que ce Grid est inclus dans une DLL affichant certains champs et permettant entre autres de sélectionner celui désirée.

Le paramétrage inclu donc les champs à afficher et le recordset. Mais pour éviter un nième recordset ne contenant QUE les champs adéquats, je passe en paramètre le nom des champs et le recordset.


Calade
Commenter la réponse de Calade
LIBRE_MAX 1403 Messages postés mardi 1 mai 2007Date d'inscription 7 octobre 2012 Dernière intervention - 8 oct. 2011 à 15:10
0
Merci
Posts croisés !

Faire un debug sur les valeurs de X.
Question d' index peut être.. [] Ce qui va sans dire. va mieux en le disant.
Commenter la réponse de LIBRE_MAX
Calade 1212 Messages postés dimanche 20 avril 2003Date d'inscription 4 juin 2016 Dernière intervention - 8 oct. 2011 à 15:16
0
Merci
Au moment des erreurs X a toujours la valeur 0, c'est la toute 1ère fois qu'il tente d'exécuter ces instructions et mon tableau est bien en base 0 tout comme les colonnes du grid et les champs d'un recordset (j'ai vérifié on ne sait jamais).


Calade
Commenter la réponse de Calade
Calade 1212 Messages postés dimanche 20 avril 2003Date d'inscription 4 juin 2016 Dernière intervention - 8 oct. 2011 à 16:53
0
Merci
Je n'ai fait qu'un vague essai, mais apparemment ça marche mais pas avec .refresh mais avec .Rebind.

Je ferais des essais plus poussés demain et en cas de problème je te recontacte.

En tout cas merci pour tout.


Calade
Commenter la réponse de Calade
LIBRE_MAX 1403 Messages postés mardi 1 mai 2007Date d'inscription 7 octobre 2012 Dernière intervention - 8 oct. 2011 à 18:03
0
Merci
Exact, c' est Rebind qu' il fallait.
Refresh ne fait que réactualiser.
Alors que Rebind reconstruit.

Cordialement.

Bonne continuation et A+




[] Ce qui va sans dire. va mieux en le disant.
Commenter la réponse de LIBRE_MAX

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.