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

ASP.NET Discussion :

[C#] Récupérer une donnée d'un datatable à partir d'un datagrid


Sujet :

ASP.NET

  1. #1
    Candidat au Club
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Octobre 2011
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Octobre 2011
    Messages : 3
    Points : 4
    Points
    4
    Par défaut [C#] Récupérer une donnée d'un datatable à partir d'un datagrid
    Bonjour,

    dans une page asp, j'ai un composant datagrid dans lequel j'affiche les données d'un datatable. Ce datatable contient des informations sur une personne. Pour faciliter la récupération de la personne lors des événements, j'ajoute dans la première colonne de mon datatable l'objet Person, et d'autres données dans les colonnes suivantes (la première colonne du datagrid contiendra le nom et prénom de la personne grâce au ToString() de la classe).

    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
     
    public class Person
    {
     
    	private int _id;
    	private string _name;
    	private string _firstName;
    	private string _job;
     
    	...
     
    	public override string ToString()
    	{
    		return this.Name + " " + this.FirstName;
    	}
     
    }
    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
     
    List<Person> persons;
     
    this.personsTable = new DataTable();
    this.personsTable.Columns.Add(PERSON_NAME_DATA_FIELD, typeof(Person));
    this.personsTable.Columns.Add(PERSON_JOB_DATA_FIELD, typeof(string));
     
    DataRow row;
    object[] items;
    foreach (Person person in persons)
    {
    	row = this.personsTable.NewRow();
    	items = new object[PERSON_LIST_ELEMENT_COUNT];
    	items[PERSON_NAME_COLUMN_INDEX] = person;
    	items[PERSON_JOB_COLUMN_INDEX] = person.Job;
     
    	row.ItemArray = items;
    	this.personsTable.Rows.Add(row);
    }
    this.PersonsDataGrid.DataSource = this.personsTable;
    this.PersonsDataGrid.DataBind();
    Malheureusement, une fois le datagrid rempli, je n'ai aucun moyen de récupérer la personne directement (le datagrid ne contient que des String).
    Je voulais donc conserver dans ma page le datatable, pour ensuite y récupérer la personne de la ligne sélectionnée. Or, je n'ai aucun moyen direct de connaitre la ligne du datatable correspondant à la ligne sélectionnée dans le datagrid...

    Comment puis-je faire le lien facilement entre la ligne sélectionnée du datagrid et l'objet Person correspondant, sans avoir à créer une colonne invisible contenant l'id de la personne ?

    Merci

  2. #2
    Membre à l'essai
    Homme Profil pro
    Ingénieur en développement Web, orienté objet ou BD
    Inscrit en
    Décembre 2011
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Ingénieur en développement Web, orienté objet ou BD
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2011
    Messages : 11
    Points : 14
    Points
    14
    Par défaut
    J'suis pas sûr de ce que je vais avancer... mais, tu cherches donc à vérifier à X lignes de ta DataTable ça correspond à la séléction de ta datGrid ?

    Si c'est le cas pourquoi tu ne ferais pas une while qui vérifie chaque ligne à la colonne de nom + prénom et qui y compare avec le nom + prénom de la ligne de la dataGrid sélectionnée ? J'suppose que tu dois pouvoir faire qqch dans le genre. Un problème peut se poser, c'est bien entendu deux fois le même nom prénom, tu peux vérifier le numéro de téléphone dans ce cas (Pour autant que ta classe de personne en contiennent) normalement c'est unique .

    Mais sinon oui, il y a toujours la colonne cachée avec l'ID dedans

  3. #3
    Membre confirmé Avatar de NicoL__
    Homme Profil pro
    Architecte
    Inscrit en
    Janvier 2011
    Messages
    399
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Architecte

    Informations forums :
    Inscription : Janvier 2011
    Messages : 399
    Points : 577
    Points
    577
    Par défaut
    En fait je pense qu'il est indispensable de créer un colonne invisible avec l'ID permettant de gérer l'élément sélectionné. Le ToString ne garanti pas l'unicité des personnes.

  4. #4
    Candidat au Club
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Octobre 2011
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Octobre 2011
    Messages : 3
    Points : 4
    Points
    4
    Par défaut
    Oui c'est ce que je voulais faire, mais je me suis résigné à utiliser la colonne cachée...

    merci d'avoir pris le temps de répondre

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

Discussions similaires

  1. Récupérer une donnée à partir d'une URL
    Par pv77164 dans le forum Balisage (X)HTML et validation W3C
    Réponses: 2
    Dernier message: 26/08/2011, 10h39
  2. Réponses: 5
    Dernier message: 20/04/2011, 13h54
  3. Réponses: 15
    Dernier message: 14/06/2009, 04h20
  4. Réponses: 1
    Dernier message: 19/04/2008, 16h26
  5. Réponses: 11
    Dernier message: 13/07/2006, 16h15

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