Problème avec le DataGrid

Résolu
Calade Messages postés 1207 Date d'inscription dimanche 20 avril 2003 Statut Membre Dernière intervention 4 juin 2016 - 8 oct. 2011 à 10:20
LIBRE_MAX Messages postés 1402 Date d'inscription mardi 1 mai 2007 Statut Membre Dernière intervention 7 octobre 2012 - 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

12 réponses

LIBRE_MAX Messages postés 1402 Date d'inscription mardi 1 mai 2007 Statut Membre Dernière intervention 7 octobre 2012 6
8 oct. 2011 à 16:39
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.
3
LIBRE_MAX Messages postés 1402 Date d'inscription mardi 1 mai 2007 Statut Membre Dernière intervention 7 octobre 2012 6
8 oct. 2011 à 13:22
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.
0
Calade Messages postés 1207 Date d'inscription dimanche 20 avril 2003 Statut Membre Dernière intervention 4 juin 2016 10
8 oct. 2011 à 13:28
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
0
LIBRE_MAX Messages postés 1402 Date d'inscription mardi 1 mai 2007 Statut Membre Dernière intervention 7 octobre 2012 6
8 oct. 2011 à 14:16
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.
0

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

Posez votre question
LIBRE_MAX Messages postés 1402 Date d'inscription mardi 1 mai 2007 Statut Membre Dernière intervention 7 octobre 2012 6
8 oct. 2011 à 14:20
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.
0
Calade Messages postés 1207 Date d'inscription dimanche 20 avril 2003 Statut Membre Dernière intervention 4 juin 2016 10
8 oct. 2011 à 14:59
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
0
LIBRE_MAX Messages postés 1402 Date d'inscription mardi 1 mai 2007 Statut Membre Dernière intervention 7 octobre 2012 6
8 oct. 2011 à 14:59
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.
0
Calade Messages postés 1207 Date d'inscription dimanche 20 avril 2003 Statut Membre Dernière intervention 4 juin 2016 10
8 oct. 2011 à 15:07
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
0
LIBRE_MAX Messages postés 1402 Date d'inscription mardi 1 mai 2007 Statut Membre Dernière intervention 7 octobre 2012 6
8 oct. 2011 à 15:10
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.
0
Calade Messages postés 1207 Date d'inscription dimanche 20 avril 2003 Statut Membre Dernière intervention 4 juin 2016 10
8 oct. 2011 à 15:16
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
0
Calade Messages postés 1207 Date d'inscription dimanche 20 avril 2003 Statut Membre Dernière intervention 4 juin 2016 10
8 oct. 2011 à 16:53
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
0
LIBRE_MAX Messages postés 1402 Date d'inscription mardi 1 mai 2007 Statut Membre Dernière intervention 7 octobre 2012 6
8 oct. 2011 à 18:03
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.
0
Rejoignez-nous