Calade
Messages postés1207Date d'inscriptiondimanche 20 avril 2003StatutMembreDernière intervention 4 juin 2016
-
8 oct. 2011 à 10:20
LIBRE_MAX
Messages postés1402Date d'inscriptionmardi 1 mai 2007StatutMembreDerniè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 ?
Calade
Messages postés1207Date d'inscriptiondimanche 20 avril 2003StatutMembreDernière intervention 4 juin 201610 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
Messages postés1207Date d'inscriptiondimanche 20 avril 2003StatutMembreDernière intervention 4 juin 201610 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
Messages postés1207Date d'inscriptiondimanche 20 avril 2003StatutMembreDernière intervention 4 juin 201610 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
Messages postés1207Date d'inscriptiondimanche 20 avril 2003StatutMembreDernière intervention 4 juin 201610 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).