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

chambreur 30 Messages postés mardi 19 août 2008Date d'inscription 15 mai 2014 Dernière intervention - 17 janv. 2014 à 11:39 - Dernière réponse : chambreur 30 Messages postés mardi 19 août 2008Date d'inscription 15 mai 2014 Dernière intervention
- 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

5 réponses

Whismeril 11510 Messages postés mardi 11 mars 2003Date d'inscriptionContributeurStatut 18 mai 2018 Dernière intervention - 17 janv. 2014 à 11:59
+1
Utile
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;

Cette réponse vous a-t-elle aidé ?  
Whismeril 11510 Messages postés mardi 11 mars 2003Date d'inscriptionContributeurStatut 18 mai 2018 Dernière intervention - 17 janv. 2014 à 12:00
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
Whismeril 11510 Messages postés mardi 11 mars 2003Date d'inscriptionContributeurStatut 18 mai 2018 Dernière intervention - Modifié par Whismeril le 17/01/2014 à 17:54
+1
Utile
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.
Cette réponse vous a-t-elle aidé ?  
chambreur 30 Messages postés mardi 19 août 2008Date d'inscription 15 mai 2014 Dernière intervention - 20 janv. 2014 à 08:54
Merci pour tout, je vais lire tout ça
Commenter la réponse de Whismeril
chambreur 30 Messages postés mardi 19 août 2008Date d'inscription 15 mai 2014 Dernière intervention - 17 janv. 2014 à 15:41
0
Utile
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.