IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C# Discussion :

importation générique pour plusieurs classes


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Femme Profil pro
    Étudiant
    Inscrit en
    Mai 2011
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Haute Vienne (Limousin)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Mai 2011
    Messages : 27
    Par défaut importation générique pour plusieurs classes
    Bonsoir à tous,
    dans mon application g différentes tables dans ma base de données et toutes renseigne au moyen des collections des datagrid. Donc, nombre de datagrid == nombre de tables. Je souhaiterais une action importer sur chacune de mes grilles. Et pour cela, il me faut faire une méthode importer qui soit générique.
    Je souhaiterais de l'aide pour le faire bien que j'ai déjà fait mon bout de code.
    public void ImportCollectionEntity(string filename)
    {
    var character = ';';
    var columnHeaderText = "";
    var destination = @"D:\tmp";
    if (!Directory.Exists(destination))
    Directory.CreateDirectory(destination);
    var CsvFpath = Path.Combine(destination, filename);
    int n = 0;
    int m = 0;
    List<T> w = new List<T>();
    List<string> tab = new List<string>();
    System.IO.StreamReader csvFileReader = File.OpenText(CsvFpath);
    //we get back all the lines of the csv file
    while (csvFileReader.Peek() >= 0)
    {
    // read and add a line
    string line = csvFileReader.ReadLine();
    tab.Add(line);
    n++;
    }
    try
    {
    //we get back all names of the properties of the entity
    PropertyInfo[] properties = typeof(T).GetProperties();
    for(int i=0;i<properties.Count() -1;i++)
    //foreach (PropertyInfo property in properties)
    {
    columnHeaderText = columnHeaderText + properties[i].Name + character;
    // columnHeaderText = columnHeaderText + property.Name + character;
    m++;
    }
    // Retreat of the header of the names of the properties in the table of the T
    tab.RemoveAt(0);
    foreach (string s in tab)
    {
    var pas = s.Split(character);
    //T POjet = BaseCollection.SingleOrDefault(te=>te.properties[0]);
    foreach (T t in BaseCollection)
    {
    PropertyInfo[] props = typeof(T).GetProperties();
    for (int i = 0; i < properties.Count() - 1; i++)
    //foreach (PropertyInfo p in properties)
    {
    //var pValeur = p.GetValue(t, null);
    var pValeur = properties[i].GetValue(t, null);
    if (Convert.ToBoolean((pas[0]).CompareTo(pValeur)))
    {
    for (int j = 0; j < props.Count() - 1; j++)
    {
    if ((props[j].PropertyType == typeof(Int64?)))
    { break; }
    if(props[j].PropertyType == typeof(string))
    {
    props[j].SetValue(t, Convert.ToString(pas[j]), null);
    }
    else if(props[j].PropertyType == typeof(bool))
    {
    if ((pas[j].Equals("True")) || (pas[j].Equals("False")) || (pas[j].Equals("false")) || (pas[j].Equals("true")))
    props[j].SetValue(t,Convert.ToBoolean(pas[j]), null);
    }
    else if (props[j].PropertyType == typeof(Int64))
    {
    props[j].SetValue(t, Convert.ToInt64(pas[j]), null);
    }
    else
    {
    props[j].SetValue(t, Convert.ToInt32(pas[j]), null);
    }
    }
    w.Add(t);
    else
    {
    for (int j = 1; j < props.Count()-1; j++)
    {
    if (props[j].PropertyType == typeof(string))
    {
    props[j].SetValue(t, Convert.ToString(pas[j]), null);
    }
    else if (props[j].PropertyType == typeof(bool))
    {
    if ((pas[j].Equals("True")) || (pas[j].Equals("False")) || (pas[j].Equals("false")) || (pas[j].Equals("true")))
    props[j].SetValue(t, Convert.ToBoolean(pas[j]), null);
    }
    else
    {
    props[j].SetValue(t, Convert.ToInt32(pas[j]), null);
    }
    }

    }
    foreach(T t in w)
    {
    BaseCollection.Add(t);
    }
    break;
    }
    break;
    }
    }
    catch (Exception ex)
    {
    log.Error(string.Format(
    "An error occurred during import: {0}", ex.Message), ex);
    }
    }
    Cette méthode n'est pas des plus optimales et comporte sans doute des erreurs donc, si quelqu'un a une idée à me proposer même si elle n'est pas dans le même sens que ce que j'ai écrit. ou peut m'aider à modifier mon code de telle façon kil marche o mieux, je l'en serais très reconnaissant.merci.

  2. #2
    Membre Expert
    Avatar de azstar
    Homme Profil pro
    Architecte Technique BizTalk/.NET
    Inscrit en
    Juillet 2008
    Messages
    1 198
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Architecte Technique BizTalk/.NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 198
    Par défaut
    je n'arrive pas vraiment à tous comprendre

    je me reformule ,tu veux exporter tes données dans la bases de données vers tes datagrid ou bien le contraire ??

  3. #3
    Invité
    Invité(e)
    Par défaut
    Bonjour, pour ton code est ce que tu pourrais le mettre dans des tags CODE vu que c'est illisible la

Discussions similaires

  1. [MEX] Fichier générique pour différentes classes
    Par takout dans le forum MATLAB
    Réponses: 9
    Dernier message: 22/06/2012, 12h33
  2. unique conteneur pour plusieurs classes dérivées
    Par jeanjack dans le forum SL & STL
    Réponses: 5
    Dernier message: 18/04/2009, 18h57
  3. Réponses: 1
    Dernier message: 02/08/2008, 00h05
  4. Réponses: 3
    Dernier message: 05/10/2006, 17h15
  5. Réponses: 2
    Dernier message: 02/02/2006, 18h21

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo