[C#][WinForm] Enregistrer les données contenues dans une Form ???

Signaler
Messages postés
38
Date d'inscription
mardi 1 mars 2005
Statut
Membre
Dernière intervention
18 octobre 2006
-
Messages postés
65
Date d'inscription
samedi 24 avril 2004
Statut
Membre
Dernière intervention
1 août 2005
-
Salut.
Alors je vous explique le truc :
J'ai fait une sorte d'enquete alimentaire, ou l'utilisateur rempli les nom, prenom, age, poids, taille etc .. d'un client. En plus de cela l'utilisateur selectionne des aliments dans des comboBox, qui sont elles memes créé automatiquement par le programme lors de l'execution.
Ma question est : Comment enregistrer toutes les données remplies et selectionner par l'utilisateur pour quelle puisse etre reouvrable ulterieurement ?
A priori, il faut créé un fichier qui contiendra toutes ces données comme le fait n'importe quel programme (Excel, word, money ...), mais comment faire ?
Merci !
J'offre un cornet de glace a mon sauveur !

7 réponses

Messages postés
65
Date d'inscription
samedi 24 avril 2004
Statut
Membre
Dernière intervention
1 août 2005
4
Il existe différentes manières de faire ce que tu veux, à savoir sauvegarder une configuration et la relire plus tard...
Une méthode qui s'y prette bien est la sérialisation.

Pour cela tu peux :

1. Créer une classe qui contiendra les champs de ton enquête
2. Lui ajouter l'attribut [Serializable] (et un "using System.Runtime.Serialization;")
3. Au moment d'enregistrer tes données, il te faudra créer et remplir une instance de ta classe,
4. tu n'auras plus qu'à invoquer la méthode "Serialize()" sur cet objet pour obtenir ton fichier de sauvegarde... Pour cela, tu peux t'y prendre de différentes façon, je t'invite à creuser ça ! Tu peux par exemple faire un truc du style :
FileStream fs = new FileStream("MaSauvegarde.perso", FileMode.OpenOrCreate);
BinaryFormatter bf = new BinaryFormatter();
bf.Serialize(fs, tesPréférences); // tesPréférences est l'instance de la classe que tu as créé !
fs.Flush();
fs.Close();

5. pour relire ta sauvegarde, il te suffira de lire le fichier, et d'appeler la méthode "Deserialize", en castant le résultat obtenu convenablement (à savoir ta classe)... Ce qui peut par exemple être fait sous la forme :
FileStream fs = new FileStream("MaSauvegarde.perso", FileMode.Open);
BinaryFormatter bf = new BinaryFormatter();
PrefClass tesPréférences = (PrefClass)bf.Deserialize(fs); // "PrefClass" est ta classe !
fs.Close();

6. il ne te reste plus qu'à réafficher tes données dans la form ! (ce qui peut être automatique si tu as moyen de les "binder"...)

Voila !
Bon courage, c'est beaucoup plus simple que ça peut en avoir l'air en première approche !

Notes :
1. Comme indiqué, il existe différentes façons d'appréhender le problème.. Ce que j'ai présenté ci-dessus est ce qui m'est venu en tête... Evidemment c'est à tester... notamment en rattrappant les cas d'erreurs possibles !
1. Si ta classe est trop compliquée, tu ne pourras peut-être pas lui donner l'attribut [Serializable], dans ce cas il faudra lui faire étendre l'interface System.Runtime.Serialization.ISerializable,
2. Si tu veux aller plus loin, il y a moyen d'obtenir un fichier de sauvegarde qui soit lisible avec excel ou word (par exemple)
Messages postés
38
Date d'inscription
mardi 1 mars 2005
Statut
Membre
Dernière intervention
18 octobre 2006
1
Ok je vais essayer, mais question :
Etant donné qu'il y' a des comboBox créé en cours d'execution du programme, comment je fais pour la classe ? je peu pas spécifier des champs qui n'existe pas encore !?
Messages postés
38
Date d'inscription
mardi 1 mars 2005
Statut
Membre
Dernière intervention
18 octobre 2006
1
Euh re quetsion ? c'est quoi ton truc "binder" ?
Messages postés
65
Date d'inscription
samedi 24 avril 2004
Statut
Membre
Dernière intervention
1 août 2005
4
Concernant le "binder" :
"Binder", c'est un mauvais terme pour dire de faire du binding (de l'anglais "to bind", attacher/lier) : c'est le fait de lier un composant d'affichage (par exemple tu associes une base de donnée à un dataview... et celui-ci récupère directement les valeurs de la base de donnée...).. Générallement on parle de databinding

Concernant la comboBox :
Pense à sauvegarder l'état complet de ton formulaire, y compris l'intégralité des champs créés (et pas seulement ceux qui sont sélectionnés).
Par exemple ta classe "PrefClasse" pourrait contenir :
- des strings représentants les nom, prenom, âge, poids, taille, etc.. du "client",
- pour chaque combobox : une liste des choix proposés, et l'index du choix choisis...

Tu peux faire un truc du genre :

[Serializable]
public class PrefClass
{
// Hop ! On comment par le nom de ton "client"
private string nom;
public string Nom
{
get { return nom; }
set { nom = value; }
}
// Idem pour prénom, âge, poids, .....
[..]

// Et ensuite tu peux sauvegarder la liste de tes comboBox, en créant ta propre classe adéquate (par exemple !)
private ChoiceList[] listeCombobox;
public ChoiceList[] ListeCombobox
{
[..]
}
}

En définissant une classe "ChoiceList" du style :
[Serializable]
public class ChoiceList
{
// Nom de ta combobox...
private string nom;
public string Nom
{ [..] }

// Liste des choix proposés dans la combobox
private string[] listeDesChoix;
public ChoiceList[] ListeDesChoix
{ [..] }

// Index du choix sélectionné
private int choix;
public [..]
}

Bon, si tu utilises le framework 2.0, au lieux de tableaux, tu peux utiliser des Collections... C'est plus sympa

Note : Désolé pour la longueur... lol.. Bon, j'suis pas habitué à poster ici... J'apprendrais à faire plus court... lol...
Messages postés
38
Date d'inscription
mardi 1 mars 2005
Statut
Membre
Dernière intervention
18 octobre 2006
1
Ok merci...
Je vais deja essayer de trouver comment faire pour le DataBind, je verrais ensuite pour les comboBox.
Messages postés
3
Date d'inscription
mercredi 9 septembre 2009
Statut
Membre
Dernière intervention
20 mai 2012

Salut tous le monde
j ai crée un "WebUserControl.ascx" pour controler l'authentification des utilisateurs connectés
voila le code de la page WebUserControl.ascx :




.style1 {
text-align: center;
}





















---------------------------------------

et ici le code de WebUserControl.ascx.cs :

using System;
using System.Collections;
using System.Configuration;
using System.Data;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Xml.Linq;
using System.Data.SqlClient;

public partial class WebUserControl : System.Web.UI.UserControl
{
protected void Page_Load(object sender, EventArgs e)
{

}
SqlConnection con = new SqlConnection("Data Source=SIMO537-PC;Initial Catalog=tuto1;Integrated Security=True");
SqlCommand cmd;
SqlDataReader dr;
protected void Button1_Click(object sender, EventArgs e)
{


con.Open();
cmd = new SqlCommand("SELECT login,password FROM users WHERE login='" + TextBox1.Text + "' and password='" + TextBox2.Text + "'", con);
dr = cmd.ExecuteReader();

if (!dr.Read())
{
Response.Write("login et/ou le mot de passe incorrect !!!");

}
else
{
Response.Redirect("getPass.aspx");




}
}
}

--------------------------------
alors je vais vous m'aider à creer un code source( une ou plusieurs solutions) pour afficher le nom d'utilisateur en ligne(connecté) ( avec la notion de controleur d'utilisateur ' useronline.ascx'
Messages postés
65
Date d'inscription
samedi 24 avril 2004
Statut
Membre
Dernière intervention
1 août 2005
4
Salut,

Ton message n'est pas au bon endroit…

Pour espérer une réponse je te conseille de le poster en dehors de la section "Archives" ! :) [Et surtout pas à la suite de messages vieux de 7 ans qui ne parlent pas du même sujet ! ;) ]
Et de préférence en catégorie Web [et non Winform !]