Comment remplir une ListView?
Bonjour,
j'aurai besoin de ptits conseil pour remplir une ListView...
Je ne suis pas encore une pro avec les Windows Forms...
En fait, je m'en sert pour charger un fichier de traces au format txt
Chaque ligne du fichier correspond à une trace au format date/type/méthode/libellé
Là, je commence par charger les traces du fichier dans un Hashtable
puis, j'insère les élèments du Hashtable dans la ListView:
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75
|
struct StructureTrace
{
public string type;
public string date;
public string methode;
public string trace;
};
private void SurOuvrirFichier(object sender, System.EventArgs e)
{
// Préparer la fenêtre de lecture du fichier de traces
ouvrirFichier = new OpenFileDialog();
ouvrirFichier.InitialDirectory = "D:\\";
ouvrirFichier.Filter = "Fichiers de traces|*.txt;*.log|Tous les fichiers|*.*";
// Lire le fichier de traces
if(ouvrirFichier.ShowDialog() == DialogResult.OK)
{
// Vérifier que le fichier existe
FileInfo fi = new FileInfo(ouvrirFichier.FileName);
string chaine = "";
if(fi.Exists)
{
// Vider la liste si elle existe
if(listeTracesFichier.Count != 0) listeTracesFichier.Clear();
// Créer le stream
FileStream fs = new FileStream(ouvrirFichier.FileName, FileMode.Open);
StreamReader sr = new StreamReader(fs);
int compteur = 0;
do
{
// Lire une ligne
chaine = sr.ReadLine();
if(chaine != null)
{
// Création de la structure d'acueil
StructureTrace st = new StructureTrace();
// Affectation
st.type = chaine.Substring(0, chaine.IndexOf("-") - 1); chaine = chaine.Substring(chaine.IndexOf("-") + 1);
st.date = chaine.Substring(0, chaine.IndexOf("{") - 1); chaine = chaine.Substring(chaine.IndexOf("{") + 1);
st.methode = chaine.Substring(0, chaine.IndexOf("}")); chaine = chaine.Substring(chaine.IndexOf(":") + 2);
st.trace = chaine;
listeTracesFichier.Add(compteur, st);
compteur ++;
}
}while (chaine != null);
}
AfficherTraces();
}
}
private void AfficherTraces()
{
string[] donnees = new string[4];
IDictionaryEnumerator listeTracesAAfficher = listeTracesFichier.GetEnumerator();
while(listeTracesAAfficher.MoveNext())
{
// Création d'une instance de travail qui pointe sur les Tags
StructureTrace st;
// Affectation de la trace
st = (StructureTrace)listeTracesAAfficher.Value;
donnees[0] = st.date; donnees[1] = st.type;
donnees[2] = st.methode; donnees[3] = st.trace;
listeTraces.Items.Insert(0, new ListViewItem(donnees));
}
} |
mais comme, il y a pls milliers de traces dans le fichier, ça met pas mal de temps à s'afficher...
a terme, j'aimerai pouvoir aussi sélectionner le type de traces à afficher
y'aurait-il une méthode un peu moins lourde?...
merci