Créer une datatable dans une classe ou la recevoir en paramètre [Résolu]

Messages postés
30
Date d'inscription
mardi 19 août 2008
Dernière intervention
15 mai 2014
- - Dernière réponse : chambreur
Messages postés
30
Date d'inscription
mardi 19 août 2008
Dernière intervention
15 mai 2014
- 20 janv. 2014 à 08:54
Bonjour,
Je m'explique:
A ce jour j'ai une datatable que je vais connecter à un datagridview, cela fonctionne bien.
L'ennui c'est que j'ai fait ça dans le code de la winform FormEditScenario_Load(object sender, EventArgs e) et je trouve pas ça très propre, je souhaite passer par une nouvelle classe qui ferait ce travail (traitement du datagridview).
Le problème c'est que pour créer une datatable, j'ai besoin d'avoir une form (sinon il ne connait pas datatable dt = new datatable();). J'ai bien pensé à l'envoyer en paramètre en faisant qque chose du type:

class editdatagridview
    {

        public string[] DatagridviewProcess(datatable dt, datagridview tableau) 
      {
      }


Mais ça ne fonctionne pas non plus.
Une idée?
Afficher la suite 

Votre réponse

3 réponses

Meilleure réponse
Messages postés
12389
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
14 décembre 2018
1
Merci
Bonjour,

plusieur choses, une Form c'est une classe, donc si tu peux y initialiser une tabel tu peux le faire aussi dans une classe perso.

DataTable appartient à l'espace de nom (namespace) System.Data.
Il te suffit d'ajouter cet espace dans la liste des Using tout en haut.

Bien sûr, tu ne sais pas toujours (rarement en fait) dans quel espace de nom tu vas chercher une instruction.

Une fois que tu as écrit
DataTable toto = new DataTable();
tu cliques droit sur DataTable, tu choisis Résoudre et tu cliques sur l'espace de non, celui ci est ajouté automatiquement (si tu travailles avec visual sutdio > 2008)

Concernant les interactions entre classes, passage de données par paramètres, par propriétés, par accesseurs, par évènements etc...

C'est un vaste sujet.
Je t'enverrais ce soir, une liste de tutos à lire.

Quoiqu'il en soit il te faut au moins acceder au datagridview de ta form, quelques exemples:

using System.Windows.Forms;//ici le namespace qui connait les datagridview

namespace WindowsFormsApplication1
{
    class Class4
    {
        DataGridView monDTW;//variable locale privée

        public Class4(DataGridView MonDTW)// passage du paramètre dans le constructeur de la classe
        {
            monDTW = MonDTW;//affectation de la référence à ma variable locale
        }

        public void GetDTW()//acceseur Get
        {
            return monDTW;
        }

        public void SetDTW(DataGridView MonDTW)//asseceur Set
        {
            monDTW = MonDTW;//affectation de la référence à ma variable locale
        }

        public DataGridView DTW//propriété
        {
            get { return monDTW; }
            set { monDTW = value; }
        }
    }
}


et pour les appels
            Class4 titi = new Class4(dataGridView1);//par le constructeur

            titi.SetDTW(dataGridView1);//par les accesseurs
            DataGridView tutu = titi.GetDTW();

            titi.DTW = dataGridView1;//par la propriété
            DataGridView tata = titi.DTW;

Dire « Merci » 1

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources a aidé 104 internautes ce mois-ci

Whismeril
Messages postés
12389
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
14 décembre 2018
-
J'oubliais il est très fortement déconseillé de mettre les varaibles d'une classe public.
Ca implique que l'exterieur peut en faire n'importe quoi, et un jour quand tu devras modifier ce code ce sera source de bugs
Commenter la réponse de Whismeril
Messages postés
12389
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
14 décembre 2018
1
Merci
De rien,

pour le passage de paramètres par évènement, tu as cette source

Pour voir la gestion des accesseurs, des propriétés etc, cette suite de tutos
http://codes-sources.commentcamarche.net/faq/816-proprietes-accesseurs-et-evenements-d-une-classe-1-3-evenements-et-serialisation
http://codes-sources.commentcamarche.net/faq/817-proprietes-accesseurs-et-evenements-d-une-classe-2-3-evenements-avant-un-changement
http://codes-sources.commentcamarche.net/faq/818-proprietes-accesseurs-et-evenements-d-une-classe-3-3-gerer-le-undo-redo-dans-les-applications

Perso, j'utilise les propriétés plutôt que les accesseurs, d'une part ça permet de se servir du binding (voir ici.
D'autre part si tu n'as pas besoin d'une variable interne tu peux écrire une propriété sans.

public double MonDouble {get; set;}


Ca s'utilise exactement comme une variable interne public, sauf que le jour ou tu évolues le code et qu'une variable interne devient utile, l'encapsulage est déjà prêt et ta relation avec l'extérieur ne change pas.

Penser aux balises de coloration syntaxique: bouton <>, préciser le langage :<code csharp>.
Quand la solution est trouvée, mettre la discussion Résolue.

Dire « Merci » 1

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources a aidé 104 internautes ce mois-ci

chambreur
Messages postés
30
Date d'inscription
mardi 19 août 2008
Dernière intervention
15 mai 2014
-
Merci pour tout, je vais lire tout ça
Commenter la réponse de Whismeril
Messages postés
30
Date d'inscription
mardi 19 août 2008
Dernière intervention
15 mai 2014
0
Merci
Je suis entièrement d'accord avec toi que une form est une classe et d'ailleurs j'étais vraiment étonné que ça marche pour l'un et pas pour l'autre.
J'ai pas du faire gaffe si en créant ma form ça avait rajouté system.data automatiquement ou bien est ce que c'est moi qui l'ai rajouté manuellement, je m'en rappel plus.
En tout cas, ta solution marche, ça marche nickel désormais.

Pour les interactions entre classe, tu as raison encore une fois, je n'ai pas protégé mon code par flemme et c'est pas bien. Je vais modifier pour mettre mes variables en privée et utiliser les accesseurs.

Merci pour tout
Commenter la réponse de chambreur

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.