Datagridvire impossible à "binder"

Résolu
Signaler
Messages postés
5
Date d'inscription
vendredi 13 février 2004
Statut
Membre
Dernière intervention
22 février 2010
-
Messages postés
120
Date d'inscription
samedi 3 mai 2008
Statut
Membre
Dernière intervention
18 juillet 2013
-
Bonjour,

c'est en dernier recours que j'ouvre un fil ici pour mon problème, car je suis certain que la solution est ultra simple, mais j'ai beau chercher, et chercher, ça ne fonctionne pas.

Voilà j'ai un bout de code le plus simple possible pour binder un datagridview à un résultat de requête SQL, mais ça ne fonctionne pas, j'ai toujours la même erreur et pourtant...

Voici le bout de code :


Dim sqlConn As New SqlConnection("Data Source=my_server;Initial Catalog=my_database;Integrated Security=SSPI;")

sqlConn.Open()

Dim sql_string As String = "SELECT fonds_id, fonds_description FROM tb_fonds"
Dim sqlComm As New SqlCommand(sql_string, sqlConn)

Dim r As SqlDataReader = sqlComm.ExecuteReader(CommandBehavior.CloseConnection)
DataGridView1.DataSource = r
DataGridView1.DataBind()
r.Close()

sqlConn.Close()


À mon sens, c'est pourtant censé fonctionner. Aussi, je précise que je procède par étapes. C'est à dire que ceci n'est pas mon objectif final. Ainsi, quand ceci fonctionnera, je voudrai mettre à la place un DataAdapter afin de pouvoir écrire les données, et aussi ajouter des boutons de navigation, possiblement de recherche aussi. Bref garnir le tout afin de mieux apprendre.


Donc, si quelqu'un pouvait m'aider à corriger ceci, j'aimerais pouvoir passer à autre chose :)

Merci,
Eric

8 réponses

Messages postés
120
Date d'inscription
samedi 3 mai 2008
Statut
Membre
Dernière intervention
18 juillet 2013
1
Bonsoir,

je pense pas qu'il est possible de faire un databinding entre un DATAreader et une datagridview en .net ,il te faut un DataSet
regarde içi
comment utilisé le Mode déconnecté .

un petit exemple avec une BD sous Access
j'ai utilisé un Button ( pour mettre a jour la table) et une DataGridView

Imports System.Data.OleDb

Public Class Form1

    Dim Cnx As New OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\TESTIMG.mdb;Persist Security Info=False")
    Dim Dst As New DataSet
    Dim Com As New OleDbCommand("Select * from Clients", Cnx)
    Dim Da As New OleDbDataAdapter(Com)
    Dim ComB As New OleDbCommandBuilder(Da)


    Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
        'chargement des données
        Da.Fill(Dst, "Clients")
        'Databinding de la datagridview1 et le dataset
        DataGridView1.DataSource = Dst
        DataGridView1.DataMember = "Clients"
    End Sub

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        Dim rst As Integer
        'Mise a jour de la table Clients
        rst = Da.Update(Dst, "Clients")
        If rst <> 0 Then
            MsgBox("Mise a jour effectué de " & rst & " ligne(s)")
        End If
    End Sub
End Class



@+
Messages postés
5
Date d'inscription
vendredi 13 février 2004
Statut
Membre
Dernière intervention
22 février 2010

Bon, à la relecture je me rends compte qu'il manque 2-3 précisions importantes à savoir :

- le message d'erreur se situe au niveau de "DataGridView1.DataBind()", j'ai toujours "'DataBind' n'est pas un membre de 'System.Windows.Forms.DataGridView'"

- bien évidemment les infos Nom_serveur et nom_bdd sont correctes

- je suis en visual studio express 2008

Merci,

Eric
Messages postés
5
Date d'inscription
vendredi 13 février 2004
Statut
Membre
Dernière intervention
22 février 2010

Merci de cette réponse, j'avais tout lu ce cours VB incroyablement bien fait, seulement je dois me rendre à l'évidence que j'ai pas tout bien compris. Je vais de ce pas travailler avec ton exemple.

Merci!
Messages postés
5
Date d'inscription
vendredi 13 février 2004
Statut
Membre
Dernière intervention
22 février 2010

@ ssefyou, merci d'abord ça marche enfin! Je peux donc commencer ma quête du .net lié à des BD en complexifiant encore et toujours ce simple exemple.

La première étape serait de te demander si tu as une erreur lors de l'update de la table. J'obtiens "Impossible pour Update de trouver TableMapping['tb_constituent'] ou DataTable 'tb_constituent'."

Crois-tu que ça pourrait être lié à ma requête SQL ?
Select nom, prenom from tb_constituent where constituent_id like '%999999%' order by nom, prenom

Si oui, j'en viens à demander si à long terme les requêtes sql complexes sont problématiques pour les datagrid? J'ai plusieurs requêtes qui tiennent sur plusieurs plusieurs lignes et sont relativement complexes. Peut-être faut-il fonctionner avec une requête pour afficher le datagridview et une autre pour updater un ID spécifique d'une table. Ou encore mieux, afficher les données dans des textbox et autres contrôles.

Quoi qu'il en soit, merci de m'avoir aidé,

Eric
Messages postés
120
Date d'inscription
samedi 3 mai 2008
Statut
Membre
Dernière intervention
18 juillet 2013
1
de rien , j'espère que l'exemple te sera d'utile
Messages postés
5
Date d'inscription
vendredi 13 février 2004
Statut
Membre
Dernière intervention
22 février 2010

Mais si je puis permettre une autre question, dans la partie qui charge datagridview, je me questionne sur ces 2 lignes
Da.Fill(Dst, "Clients")
DataGridView1.DataMember = "Clients"

Pourquoi faire cela? Et surtout, quel impact cela aurait si mon datagrid contenait des données provenant de plusieurs tables jointées? Si au lieu d'avoir des données de la table Clients, elle proviennent de la table abc inner join def inner join xyz...

Eric
Messages postés
120
Date d'inscription
samedi 3 mai 2008
Statut
Membre
Dernière intervention
18 juillet 2013
1
re,

Da.Fill(Dst, "Clients")

-permet de chargé l'objet Dst (un Dataset c'est l'équivalent du RecordSet en vb6 mais il permet de stocker plusieurs table avec leurs shema) donc mon Dst contient une table nommé "Clients" cet table est remplie avec lignes ces lignes sont le résultat de l'objet Com (commande = requete Sql)

pour la 2eme instruction

DataGridView1.DataMember = "Clients"
j'ai spécifie a la table a la quell je vai lié mon datagrid parceque mon Dataset peut contenir plusieurs table
Messages postés
120
Date d'inscription
samedi 3 mai 2008
Statut
Membre
Dernière intervention
18 juillet 2013
1
pour les jointures je pense que c est pas possible de faire une mise a jour a une table qui n'existe pas au niveau de la DB
(jamais testé)