chambreur
Messages postés30Date d'inscriptionmardi 19 août 2008StatutMembreDernière intervention15 mai 2014
-
17 janv. 2014 à 11:39
chambreur
Messages postés30Date d'inscriptionmardi 19 août 2008StatutMembreDernière intervention15 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)
{
}
Whismeril
Messages postés18404Date d'inscriptionmardi 11 mars 2003StatutContributeurDernière intervention30 mai 2023623 17 janv. 2014 à 11:59
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;
Whismeril
Messages postés18404Date d'inscriptionmardi 11 mars 2003StatutContributeurDernière intervention30 mai 2023623 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
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.
chambreur
Messages postés30Date d'inscriptionmardi 19 août 2008StatutMembreDernière intervention15 mai 2014 20 janv. 2014 à 08:54
chambreur
Messages postés30Date d'inscriptionmardi 19 août 2008StatutMembreDernière intervention15 mai 2014 17 janv. 2014 à 15:41
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.
17 janv. 2014 à 12:00
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