Salut les amis!
je suis en train de m’amuser en C#, que je connais tres peu.
J’essaye de faire un petit programme a la con qui gere qq tableau, les affiches, permets de faire des manipulation simples sur les données qu’ils contiennent…
Ya en gros une colonne par mois de l’année + une colonne pour un nom + une colonne qui est la somme des valeurs.
Il y a autant de ligne que l’on veut (en gros chaque ligne est une nouvelle entrée).
Rien que ne pourrait faire excel en somme, mais c’est pour un pote qui ne sait pas se servir d’excel, et comme j’avais envi de me degourdir les doigts, je lui fais sur mesure ^^
Voila, J’ai donc créé une classe ligne, qui contient un tableau de float, un nom, et la somme de valeurs du tableau.
J’ai egalement une classe tableau, qui contient une sortedList, qui va contenir mes lignes (la clef sera le nom de la ligne).
J’ai fait les methode pour ajouter des lignes tout ca, pas de pb.
Ma premiere question est la suivante :
Pour afficher tout ca, j’ai 2 solution : tout faire a la main (je pense en etre capable), mais ca me fera coder “a l’ancienne”, comme je faisais en java ou en C++, en creant tout, et particulierement les interaction ihm. C’est long et fastidieux.
Ou utiliser des nouvelles briques que je sais exister, comme par exemple un DataGridView, et lui associer un BindingSource. Et ca me permet d’apprendre en meme temps les techniques de programation de 2005 et pas continuer comme en 1995 ^^
Ce que j’aimerai faire, c’est que je lie ma classe tableau au datagridview, en implementant une interface sur ma classe, ou en surchargant les methode de creation de ligne et autre. Cela pour que C# appelle les methode d’ajout de ligne de MA classe tableau a moi. Comme ca les données seraient liées et ca m’eviterai de me coder a la main toute les interactions (modification de la valeur d’une case, ajout d’une ligne …).
Le pb, c’est que je sais absoluement pas comment ca marche. Les tutoriaux que j’ai trouvé sur le net me parle de table et autre, mais j’ai pas envi d’aller dans ce sens la.
J’aimerai, en gros, rester maitre de la maniere dont sont gerer les données, mais utiliser un composant tout pret (le datagridview par exemple) pour les afficher et les manipuler.
Voila, si vous pouvez m’aider, je suis preneur ^^
Pour info, voici le code actuel, c’est fait a la va vite en 2h hier soir, j’apprends en meme temps. Soyez donc pas trop servere avec la propreté ^^ Je refondrais le tout quand je serais plus à l’aise avec C#. (!summon Gloppy ^^)
[code]using System;
using System.Collections.Generic;
using System.Windows.Forms;
namespace Compta
{
static class Program
{
///
/// The main entry point for the application.
///
[STAThread]
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
ComptaForm comptaForm = new ComptaForm();
Application.Run(comptaForm);
// Essai à la main pour voir comment ca se comporte
float[] tab = { 1, 2, 3, 4, 12.354654F, 321, 546, 321, 654, 87, 6524, 321 };
System.Console.WriteLine("toto\n");
Ligne maLigne = new Ligne("hop", tab);
Tableau grostab = new Tableau();
grostab.addLigne(maLigne);
maLigne = new Ligne("zup", tab);
grostab.addLigne(maLigne);
maLigne = new Ligne("toto", tab);
grostab.addLigne(maLigne);
maLigne = new Ligne("gouzi", tab);
grostab.addLigne(maLigne);
maLigne = new Ligne("prosper", tab);
grostab.addLigne(maLigne);
maLigne = new Ligne("bidule", tab);
grostab.addLigne(maLigne);
maLigne = new Ligne("arof", tab);
grostab.addLigne(maLigne);
System.Console.WriteLine(grostab.toString());
Ligne autreLigne = grostab.getLigneByName("bidule");
autreLigne.setMontantByMonth(Mois.JANVIER, -123);
System.Console.WriteLine(grostab.toString());
comptaForm.tableauBindingSource.DataSource = grostab;
}
}
enum Mois
{
JANVIER,
FEVRIER,
MARS,
AVRIL,
MAI,
JUIN,
JUILLET,
AOUT,
SEPTEMBRE,
OCTOBRE,
NOVEMBRE,
DECEMBRE
}
static public class Constante
{
// Definition des constantes
public const int NB_MOIS = 12;
}
}
using System;
using System.Collections;
using System.Text;
namespace Compta
{
class Ligne
{
// constructeurs
public Ligne(String nom)
{
m_nom = nom;
m_tableau = new float[Constante.NB_MOIS];
calculSomme();
}
public Ligne(String nom, float[] tableau)
{
m_nom = nom;
m_tableau = new float[Constante.NB_MOIS];
if (tableau.Length == Constante.NB_MOIS)
{
for (int i = 0; i < m_tableau.Length; i++)
m_tableau[i] = tableau[i];
}
calculSomme();
}
// methode de la classe
public void calculSomme()
{
m_somme = 0;
for (int i = 0; i < m_tableau.Length; i++)
{
m_somme += m_tableau[i];
}
}
// Affichage generique
public string toString()
{
string result;
result = "Nom=[" + m_nom + "] -- Somme=["+m_somme+"] -- Tableau=[";
for (int i = 0; i < m_tableau.Length; i++)
{
result += m_tableau[i].ToString();
if(i==(m_tableau.Length-1))
result += "]";
else
result +=";";
}
return (result);
}
// Accesseurs
public string getNom() { return (m_nom); }
public float getSomme() { return (m_somme); }
public float getMontantByMonth(Mois mois)
{
return (m_tableau[(int)mois]);
}
public void setMontantByMonth(Mois mois, float value)
{
m_tableau[(int)mois] = value;
calculSomme();
}
// Variables membre
private string m_nom = null;
private float[] m_tableau;
private float m_somme;
}
class Tableau
{
// constructeurs
public Tableau()
{
m_lignes = new SortedList();
}
// manipulation des lignes
public void addLigne(Ligne ligne)
{
if(ligne != null)
{
m_lignes.Add(ligne.getNom(), ligne);
}
}
public Ligne getLigneByName(string nom)
{
if (nom != null)
{
int index = m_lignes.IndexOfKey(nom);
if (index != -1)
return ((Ligne) m_lignes.GetByIndex(index));
else
return (null);
}
else
return (null);
}
// Affichage generique
public string toString()
{
string result;
Ligne ligne;
result = "Tableau : NbLigne=["+m_lignes.Count+"]\n";
for(int i = 0; i < m_lignes.Count; i++)
{
ligne = (Ligne) m_lignes.GetByIndex(i);
result += m_lignes.GetKey(i) + ":\t" + ligne.toString() + "\n";
}
return (result);
}
// accesseur
public SortedList getLignes() { return m_lignes; }
// Variable membre
private SortedList m_lignes = null;
}
}[/code]
A oui derniere question, sur le SortedList : pour typé les données qu’il contient (pour eviter les casts derriere), j’ai voulu le declarer comme ca:
Ca a tres bien marché, sauf qu’ensuite, quand j’ai voulu utiliser la methode GetByIndex, il m’a dit que cette methode existe pas. Comment ca se fait ? j’ai donc abandonné pour avancer en la declarant comme ca :
et je me cogne des cast quand je recupere mes lignes. C’est dommage.
Voila, merci pour votre aide, et desolé si ces questions sont simpliste ^^