IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C# Discussion :

SqlDataSource et Label


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2007
    Messages : 30
    Par défaut SqlDataSource et Label
    Bonjour,

    J'ai un petit problème qui semble basique mais je ne trouve pas la solution (dans mes souvenirs ou sur le net). Je récupère un champ unique grâce à un SQLDataSource grâce à une requête de type SELECT. Je voudrais affecter la valeur de ce champ au texte d'un label.

    Je sais que contrairement aux dropdownlist on ne peut pas "binder" directement le label au sqldatasource. Si je me souviens bien il faut passer par des éléments intermédiaires genre dataset ou qqch ainsi mais je ne me souviens plus de l'élément ni de la syntaxe!

    Pourriez-vous m'aider?

  2. #2
    Membre Expert
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    1 103
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 103
    Par défaut
    la raison est simple :

    dropdownlist, ou listbox ou n'importe quel composant de ce type dispose de plusieurs éléments donc N valeurs à l'instant T, on peut donc les alimenter avec une requete sql (select)

    en revanche, un label c un composant unique avec une seule valeur à l'instant T, il est donc logique que tu ne puisse pas le lier "directement" a une requete de type select suceptible de retourner plus d'un résultat. (ou pas du tout)
    moi personnellement j'utilise pas les bindings des composants.
    mais c'est ma facon de procéder.

    si tu veux pas ou peux pas utiliser les binding/datasources des composants,

    avec ta connexion string tu instancie une SqlConnection (là c pour du sql server mais le principe est le meme pour autre chose)

    tu affecte ta Connectionstring à cette DbConnection puis tu créer un SqlDataAdapter (appelé adapter par exemple)
    ensuite tu créer une commande de lecture SqlCommand que tu va affecter à la propriété SelectCommand de ton adapter de données.
    cette SqlCommand tu lui met ta requete SQL à exécuter, et tu lui affecte la SqlConnexion que tavais créer.

    tu créer un dataset ou une datatable et tu fait
    adapter.fill(ds);
    au miracle ta pu qu'a traiter les datatables de ds
    et les datarow des datatables

    exemple:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
     
    SqlConnection conn = new SqlConnection();
    conn.ConnectionString = ...;
     
    SqlCommand query = new SqlCommand();
    query.Connection = conn;
    query.CommandText = "SELECT * ...";
    query.CommandType = CommandType.Text;
     
    SqlDataAdapter adapter = new SqlDataAdapter();
    adapter.SelectCommand = query;
    adapter.MissingSchemaAction = MissingSchemaAction.AddWithKey;
     
    DataSet ds = new DataSet();
    adapter.Fill(ds);
     
    // donc ds.Tables[index] pour accèder a une datatable
    // donc ds.Tables[i].Rows[j] pour accèder à la ligne j de la table i
    // et ds.Tables[i].Rows[j][x] pour accèder a la colonne x de la ligne
    // avec x un int (index de la colonne) ou un string (nom de la colonne)
    // le resultat est un "object" donc oublie pas de le caster.
     
    monLabel.Text = ds.Tables[i].Rows[j][0] as string;
    monLabel.Text = ds.Tables[i].Rows[j]["nom"] as string;

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2007
    Messages : 30
    Par défaut
    Merci pour cette réponse.

    C'est plus ou moins ce que je recherche mais je suis obligé de passer par le SqlDataSource car l'entreprise souhaite gérer des procédures stockées.

    J'ai essayé ce que tu proposais et je n'ai pas accès à SqlDataAdaptater...

    Faut-il importer une librairie??

    Je ne peux donc pas écrire la requête comme tu le fais dans le code C# mais je me souviens avoir réussi à faire comme toi avec un dataset mais je ne retrouve plus la syntaxe (pour l'utiliser avec un SqlDataSource)

    Merci pour votre aide

  4. #4
    Membre Expert
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    1 103
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 103
    Par défaut
    tu peux accèder à la procédure stocker de la meme facon

    a ceci près que tu va modifier la commande sql :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    query.CommandText = "proc"/* Nom de la procédure stockée */;
    query.CommandType = CommandType.StoredProcedure;
     
    /// On bind le paramètre de la procédure @param1 à param1
    query.Parameters.Add(new SqlParameter("@param1", param1));
    et voila... c'est pas plus compliqué.

    Pour pouvoir utiliser cela... tu dois mettre System.Data comme référence dans ton projet, et tu dois importer les namespaces suivants :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    using System.Data;
    using System.Data.Common;
    using System.Data.SqlClient;
    et là normallement ca devrait fonctionner
    System.Data.Common contient les définitions pour DataSet/DataRow...
    System.Data.SqlClient contient les définitions pour SqlConnection, SqlDataAdapter, SqlCommand, SqlParameter

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2007
    Messages : 30
    Par défaut
    Merci encore pour cette réponse mais je voulais absolument passer par le SQLDataSource.

    J'ai finalement trouvé :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    DataSourceSelectArguments dssa = new DataSourceSelectArguments();
    DataTable dt = ((DataView)SqlDataSourceNbreCat.Select(dssa)).ToTable();
    Labelnbrecat.Text = dt.Rows[0][0].ToString();
    Voila

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. label à caption défilante
    Par ulysse66x dans le forum Composants VCL
    Réponses: 2
    Dernier message: 29/06/2003, 21h01
  2. Faire defiler Texte dans un label
    Par Techsan dans le forum Composants VCL
    Réponses: 5
    Dernier message: 08/06/2003, 23h29
  3. [Kylix] Labels du QTreeView tronqués
    Par Mister Nono dans le forum EDI
    Réponses: 3
    Dernier message: 05/11/2002, 19h45
  4. [VB6] Des labels qui réagissent à la souris
    Par murielle dans le forum VB 6 et antérieur
    Réponses: 8
    Dernier message: 24/10/2002, 14h19
  5. scroll dans un label
    Par Pretender dans le forum Composants VCL
    Réponses: 9
    Dernier message: 27/09/2002, 17h06

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo