Datagrid, questions en vrac

Signaler
Messages postés
148
Date d'inscription
lundi 12 février 2007
Statut
Membre
Dernière intervention
9 novembre 2013
-
Messages postés
45
Date d'inscription
jeudi 8 mars 2007
Statut
Membre
Dernière intervention
3 mars 2010
-
Bonjour à tous,

J'ai fait une application qui écrit dans une base de données mysql des messages qu'elle reçoit régulièrement. Une autre partie de cette application lit la table remplie et la charge dans un datagrid (au passage, merci à [auteur/SLAYER31DEVCPP/904074.aspx sLaYeR31] pour son excellente source). Vu que je découvre ce composant, et le .net par la même occasion, il y a encore pas mal de problèmes que je n'ai pas encore résolu. Les voici:

1.Comment mettre à jour ma datagrid à chaque insert dans ma base mySQL? J'ai une fonction de ma classe mySQL, pour les inserts, à la fin de laquelle j'ai rajouté:

principale est le nom de ma form principale, dts est mon dataset, et datagrid1.......je vous laisse deviner.
principale.DataGrid1.ResetText()
principale.DataGrid1.DataSource = dts.Tables("xapraw")

Ca marche pas!

Ajoutons à ça que par économie, et histoire de pas vider et recharger complètement  la datagrid devant l'utilisateur toutes les 2 secondes, je voudrais ajouter uniquement les nouvelles lignes. (datagrid1.update ou datagrid1.refresh?)
2. (un peu hors sujet) Quelle requête mysql pour afficher les x dernières entrées dans ma table? Pour le moment, je fais

SELECT * FROM xapraw ORDER BY ID DESC LIMIT 50

Ce qui me donne les 50 dernières entrées, mais dans le mauvais ordre!

3. Comment garder le focus sur le bas de la datagrid? J'ai pas mal de lignes et au lancement, je suis en haut de ma datagrid, mais ce sont les derniers messages qui m'intéressent. Comment donc mettre automatiquement le focus en bas?

4. Comment augmenter la taille (en nombre de caractères) de mes cellules? J'ai dans ma BDD des champs de type longtext, qui sont presque des petits paragraphes, et il n'y a que la première dizaine de caractères qui s'affiche...

5 Question subsidiaire: Comment intégrer une image dans les cellules de la datagrid?

Merci!

10 réponses

Messages postés
45
Date d'inscription
jeudi 8 mars 2007
Statut
Membre
Dernière intervention
3 mars 2010

Salut,

Pour vider une datagrid, tu peux faire comme cela madatagrid.datasource = Nothing puis ensuite tu recharges ton data set dedans comme tu le fais déjà.

Pour ta deuxième question, je ne sais pas trop.

Pour garder le focus sur une cellule en bas d'une datagrid, tu peux essayer de sélectionner la dernière ligne du datagrid en faisant par exemple : maDataGrid.SelectedRows(maDatagrid.Rowcount -1) (je suis pas sûr pour le - 1) Comme cela tu auras tout le temps ta dernière ligne de sélectionnée. Ou alors tu peux essayer d'afficher les messages dans l'ordre inverse dans ta datagrid !

Pour augmenter la taille en nombre de caractère de ta cellule de ta datagrid, tu peux mettre dans les propriétés de ta datagrid en mode design, les propriétés autoSizeColumnsMode et autoSizeRowMode à AllCells comme cela toutes tes colonnes seront redimensionnées suivant leur contenu !

Voila j'espère avoir pu t'aider. Bon courage pour ton application.
Messages postés
148
Date d'inscription
lundi 12 février 2007
Statut
Membre
Dernière intervention
9 novembre 2013

Merci pour ces réponses, [auteur/OO7JB5/1001238.aspx oo7jb5]

pour vider la datagrid, ta solution fonctionne mais j'aimerai bien trouver quand même comment incrémenter les modifications sans tout recharger.

Pour le focus, pour le moment, les résultats sont arrivent par le haut, donc pas de problème. Lorsque j'aurai la bonne requete mySLQ, j'esserai ton astuce.

Par contre, pour le nombre de caractères par cellule, les propriétés que tu cites n'apparaissent pas actuellement. Il y a une référence à ajouter?
Messages postés
148
Date d'inscription
lundi 12 février 2007
Statut
Membre
Dernière intervention
9 novembre 2013

Et comment éditer mon post pour corriger mes fautes d'orthographe?
Messages postés
45
Date d'inscription
jeudi 8 mars 2007
Statut
Membre
Dernière intervention
3 mars 2010

Salut,

Pour le fait d'éditer ton post pour corriger tes fautes, je crois qu'il faudra qu tu fasses avec, je ne suis pas sûr que l'on puisse les modifier.

Alors pour le nombre de caractère par cellule, moi en fait je te donnais une astuce qui consistait à augmenter la taille des cellules par rapport à son contenu, c'est bizarre que tu ne trouves pas les contrôles que je t'ai mis, chez moi ils apparaissent clairement. Est ce que cela viendrait du fait que je travail sous Visual Basic 2008 et toi non ? Je penses pas.

Donc tu n'as pas ces deux lignes dans les Properties de ta datagridview en mode design ? Moi je cliques juste sur la datagridview puis je regardes les propriétés et c'est au début dans les 10 premières lignes..
Messages postés
148
Date d'inscription
lundi 12 février 2007
Statut
Membre
Dernière intervention
9 novembre 2013

Je bosse aussi avec vb 2008, donc ça ne doit pas être ça.

Sinon, ma datagrid est construite dynamiquement (pas de définition des colonnes, elle affiche les colonnes transmises par la requête) et c'est peut-être pour ça.

Au passage, si tu utilises des datagrid, j'ai trouvé une excellente fonction pour dimensionner idéalement la largeur (graphique) des colonnes, et je ne pense pas que ça justifie une source (d'autant qu'elle n'est pas de moi). Cela dit, la voici:

Public Sub columns_autoresize(ByRef sqlGrid As DataGrid)

        Try
            Dim t As Type = sqlGrid.GetType
            Dim m As Reflection.MethodInfo = t.GetMethod("ColAutoResize", Reflection.BindingFlags.NonPublic Or Reflection.BindingFlags.Instance)

            Dim i As Integer = sqlGrid.FirstVisibleColumn
            Dim j As Integer = sqlGrid.VisibleColumnCount
            Do While i < j
                m.Invoke(sqlGrid, New Object() {i})
                i = i + 1
            Loop
        Catch ex As Exception
            Trace.Write("Failed to resize column: " + ex.ToString + vbCrLf)
        End Try
    End Sub
Messages postés
45
Date d'inscription
jeudi 8 mars 2007
Statut
Membre
Dernière intervention
3 mars 2010

Cela explique pourquoi tu n'as pas accès au designer ! Autant pour moi. Cependant tu peux toujours utiliser les fonctions autoresizeRow et autoresizecolumn. Est-ce-que ton problème a été résolu avec la fonction que tu as donné dans le post précédent ?
Messages postés
148
Date d'inscription
lundi 12 février 2007
Statut
Membre
Dernière intervention
9 novembre 2013

Non, la fonction que j'ai donné permet de dimensionner la largeur des cellules en affichage, pas le nombre de caractères qu'elles contiennent.

lorsque j'essaie d'appeler la propriété autoresizeRow, visual studio 2008 me renvoie " la propriété autoresizeRow n'est pas un membre de 'system.windows.forms.datagrid'", mais après une petite recherche google, je me suis rendu compte que ces propriétés sont à mettre après datagridview. Je ne suis plus très sûr que ça vienne de là, le problème de nombre de caractères par cellule ne variant pas avec la largeur de celle ci. Ca vient peut-être du dataset. En attendant, je persévère
Messages postés
45
Date d'inscription
jeudi 8 mars 2007
Statut
Membre
Dernière intervention
3 mars 2010

Oui, cela peut en effet venir de ton dataset, si ce dernier n'accepte pas autant de caractère que tu rentres mais vu que dans ton cas les données sont déjà dans ta table, cela ne vient pas du dataset mais plutôt de ton affichage apparemment. En relisant de plus près ta fonction, il faut que tu remplaces le datagrid par un datagridview (le datagrid étant, il me semble l'ancêtre du datagridview).

Est ce que ton texte est vraiment coupé où il ne s'affiche pas tout à l'écran ?
Messages postés
148
Date d'inscription
lundi 12 février 2007
Statut
Membre
Dernière intervention
9 novembre 2013

le texte est vraiment coupé dans la cellule, à partir du 45ème caractère, alors que dans la table mySQL, cette même cellule en fait 60. Pour ce qui est de remplacer par un datagridview, je pense que ce sera un dernier recours car j'ai eu du mal à obtenir un résultat avec le datagrid. L'idée, si c'est le dataset, serait que chaque item de ma collection de données est limité à 45 caractères. Et si c'est le cas, comment change t on cette valeur?
Messages postés
45
Date d'inscription
jeudi 8 mars 2007
Statut
Membre
Dernière intervention
3 mars 2010

Alors dans mon cas j'utilise des dataSets typés mais fin bref normalement moi quand je vais dans les propriétés de mon dataset en mode design et bien tu peux voir tous ses paramètres et donc tu peux voir si l'élément en question est bloqué à 45 caractères ou non. Voila après je n'ai pas d'autres idées pour le moment. Bon courage.