Execution variable

ducker88 Messages postés 277 Date d'inscription lundi 9 février 2004 Statut Membre Dernière intervention 4 mai 2008 - 12 juin 2006 à 10:01
ducker88 Messages postés 277 Date d'inscription lundi 9 février 2004 Statut Membre Dernière intervention 4 mai 2008 - 13 juin 2006 à 10:20
Bonjour à tous,

J'aimerai savoir si il est possible d'executer une commande qui serai placé dans une variable.

Exemple :

J'ai  i = 100 dans la variable string test, je voudrais savoir si
il existe un moyen pour executer la commande qui est entré dans cette
chaine, si oui comment ? merci à tous

duck88

13 réponses

dgouttegattat Messages postés 129 Date d'inscription mardi 22 novembre 2005 Statut Membre Dernière intervention 30 décembre 2007 3
12 juin 2006 à 12:33
Bonjour,
Je ne crois pas qu'il existe un moyen simple de faire cela en C# (dans le genre de la fonction eval() de Perl).
Un moyen (très) compliqué consiste à utiliser la réflection pour créer dynamiquement une méthode exécutant l'instruction demandée ; cela implique de parser "manuellement" la chaîne de caractères et d'émettre les instructions IL correspondantes.
0
SharpMao Messages postés 1024 Date d'inscription mardi 4 février 2003 Statut Membre Dernière intervention 7 juin 2010 69
12 juin 2006 à 12:59
Voilà,

Je crois qu'il n'y a pas grand chose à rajouter, si ce n'est que si tu nous explique ce que tu veux faire, on pourra peu-être t'indiquer un autre moyen d'y arriver.

Amicalement, SharpMao
0
ducker88 Messages postés 277 Date d'inscription lundi 9 février 2004 Statut Membre Dernière intervention 4 mai 2008
12 juin 2006 à 13:48
Je recupère dans un fichier de configuration les caracteristiques des
differentes colonnes d'un datagrid, tel que me type, la taille, la
position...


Ce que je voudrais faire c'est créer les colonnes d'après ces
differents parametres. J'avais donc pensé a mettre les differentes
lignes de codes dans des variables et les executer au fur et a mesure
pour les créer.


Existe t'il un moyen simple pour sauvegarder l'ordre des colonnes dans
un fichier de configuration et par la suite les restituer à la demande.


Que me préconiser vous ?


Merci

duck88
0
dgouttegattat Messages postés 129 Date d'inscription mardi 22 novembre 2005 Statut Membre Dernière intervention 30 décembre 2007 3
12 juin 2006 à 15:45
Je pense que le plus simple serait de rassembler dans un objet les paramètres de chaque colonne que tu désires sauvegarder, de créer une collection de ces objets et de sérialiser la collection.

Un exemple :
<hr />// La structure contenant les paramètres d'une colonne
[Serializable()]
public struct ColumnSettings
{
   private int width;
   private int position;

   public int Width
   {
      get {return width;}
      set {width = value;}
   }

   public int Position
   {
      get {return position;}
      set {position = value;}
   }

   public ColumnSettings(int width, int position)
   {
      this.width = width;
      this.position = position;
   }
}

// Ailleurs dans le code
List<ColumnSettings> settings = new List<ColumnSettings>();
XmlSerializer serializer = new XmlSerializer(typeof(List<ColumnSettings>));

// Pour sauvegarder
Stream s = File.Create("settings_file.xml");
serializer.Serialize(s, settings);
s.Close();

// Pour récupérer
Stream s = File.OpenRead("settings_file.xml");
settings = (List<ColumnSettings>) serializer.Deserialize(s);
s.Close();

// Créer les colonnes
foreach (ColumnSettings cs in settings)
{
   DataGridViewColumn column = new DataGridViewColumn();
   column.Width = cs.Width;
   // etc...
}
<hr />
Voilà, ça devrait te donner une idée générale de ce que tu peux faire.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
ducker88 Messages postés 277 Date d'inscription lundi 9 février 2004 Statut Membre Dernière intervention 4 mai 2008
12 juin 2006 à 15:49
Merci je vais m'appuyer sur ca pour faire ma sauce.

Encore merci.

duck88
0
ducker88 Messages postés 277 Date d'inscription lundi 9 février 2004 Statut Membre Dernière intervention 4 mai 2008
12 juin 2006 à 16:08
Une petite question pour finir, est t'il possible de serialiser plusieurs objets dans un meme fichier ?

duck88
0
dgouttegattat Messages postés 129 Date d'inscription mardi 22 novembre 2005 Statut Membre Dernière intervention 30 décembre 2007 3
12 juin 2006 à 16:25
Je viens de faire un test rapide : a priori, non, tu ne peux pas sérialiser plusieurs objets dans un même fichier.

Plus exactement, tu peux sérialiser plusieurs objets dans le même fichier, mais dans ce cas tu ne peux pas désérialiser : une exception InvalidOperationException est lancée lorsque tu tentes de désérialiser à partir d'un fichier dans lequel tu as sérialisé plusiurs objets à la suite.

C'est quan même un peu dommage ; je vais essayer de voir plus en détail dans la doc s'il y a une solution, je te tiens au courant.
0
ducker88 Messages postés 277 Date d'inscription lundi 9 février 2004 Statut Membre Dernière intervention 4 mai 2008
12 juin 2006 à 16:28
Merci beaucoup de ton aide.

duck88
0
ducker88 Messages postés 277 Date d'inscription lundi 9 février 2004 Statut Membre Dernière intervention 4 mai 2008
12 juin 2006 à 16:34
Je peux avoir plusieurs type de colonne tel que DataGridViewCheckBoxColumn ou DataGridViewTextBoxColumn,

comment puis je les referencé dans ma classe serialisé ?


Merci.

duck88
0
dgouttegattat Messages postés 129 Date d'inscription mardi 22 novembre 2005 Statut Membre Dernière intervention 30 décembre 2007 3
12 juin 2006 à 17:18
Alors, pour ce qui est de la sérialisation de plusieurs objets dans un même fichier, c'est possible si tu sérialises au format binaire (en utilisant System.Runtime.Serialization.Formatters.Binary.BinaryFormatter au lieu de System.Xml.Serialization.XmlSerializer). L'inconvénient, c'est précisément que le format du fichier est binaire (et non Xml), ce qui le rend difficilement modifiable en dehors de l'application.

Pour enregistrer le type de colonne, tu peux rajouter à la classe un champ de type Type, auquel tu affecteras le type de colonne grâce à l'opérateur typeof().
<hr />// Dans la définition de la structure ColumnSettings
private Type columnType;
public Type ColumnType
{
   get {return columnType;}
   set {columnType = value;}
}

columnSettings.ColumnType = typeof(DataGridViewCheckBoxColumn);<hr />
Du coup, pour recréer la colonne à partir de la structure désérialisée, tu peux faire:
<hr />// Créer une instance à partir du type
DataGridViewColumn column = (DataGridViewColumn)Activator.CreateInstance(columnSettings.ColumnType);
// puis affecter les propriétés comme avant
column.Width = columnSettings.Width
// etc...
<hr />
Voilà.
0
ducker88 Messages postés 277 Date d'inscription lundi 9 février 2004 Statut Membre Dernière intervention 4 mai 2008
13 juin 2006 à 09:21
Je me demandais s'il ne serait pas plus simple en fait de serialisé
directement le datagrid à la place de la colonne. Est ce que cette
possibilité garderais l'etat des colonnes ?

duck88
0
dgouttegattat Messages postés 129 Date d'inscription mardi 22 novembre 2005 Statut Membre Dernière intervention 30 décembre 2007 3
13 juin 2006 à 10:15
Ce serait plus simple, mais ce n'est pas possible, la classe DataGridView n'est pas sérialisable. Les classes DataGridViewColumn et DataGridViewColumnCollection ne le sont pas non plus. C'est justement pour ça que je t'ai conseillé de créer ta propre classe (ou structure) pour stocker les propriétés que tu veux sauvegarder.
0
ducker88 Messages postés 277 Date d'inscription lundi 9 février 2004 Statut Membre Dernière intervention 4 mai 2008
13 juin 2006 à 10:20
ok merci bcp pour ton aide

duck88
0
Rejoignez-nous