Charger des données dans un datagrid sans connaitre à priori le type des données
Fildomen
Messages postés805Date d'inscriptionjeudi 22 mai 2003StatutMembreDernière intervention30 octobre 2010
-
17 oct. 2010 à 13:11
cs_serco
Messages postés8Date d'inscriptionjeudi 13 avril 2006StatutMembreDernière intervention19 octobre 2010
-
19 oct. 2010 à 17:00
Bonjour,
Dans un projet je dois lire un fichier excel et l'afficher dans un datagrid, j'arrive à lire le fichier et en extraire les données mais pour l'affichage dans le datagrid il faut une datasource, le problème c'est que les fichiers excel je connais pas les données qu'ils contiennent, donc je peux pas créer une liste d'un certain objet et la remplir. quelqu'un en a idée ? sinon au pire est-ce qu'on peut utiliser CODEDOM ou un truc du genre pour créer des objets génériques au moment du runtime, pour les remplir et les envoyer au datagrid ?
Merci beaucoup !
A voir également:
Charger des données dans un datagrid sans connaitre à priori le type des données
cs_serco
Messages postés8Date d'inscriptionjeudi 13 avril 2006StatutMembreDernière intervention19 octobre 2010 19 oct. 2010 à 17:00
Bonjour,
Si tu peut récupérer les donnes en ficher format délimitée exemple "csv" j'ai un solution pour toi le code suivent considérer que dans ton fenêtre tu a un DataGridView et un BackgroundWorker car la liste peut être long
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.IO;
namespace SerGes
{
/// <summary>
///
/// </summary>
public partial class Form2 : Form
{
/// <summary>
///
/// </summary>
public Form2()
{
InitializeComponent();
}
private void Form2_Load(object sender, EventArgs e)
{
this.backgroundWorker1.RunWorkerAsync();
}
string Sep = ";"; // on utilis com separateur de champs <<;>>
private delegate void AjoutDesLignesss(string Ligne);
int j;
/// <summary>
/// On lit ficher ligne par ligne en arrière plane et On envoyer
/// avec parametre "Ligne" de la Variable delege (AjoutDesLignes)vers la (RecupererLesDonnes)
/// </summary>
public void Lire_Des_Donnes()
{
try
{
string Ligne;
StreamReader lecteur = new StreamReader("TonFicher.csv", Encoding.Default);
while (lecteur.Peek() > 0)
{
Ligne = lecteur.ReadLine();
try
{
//On appel du délégué <>
Invoke(new AjoutDesLignesss(RecupererLesDonnesss), new object[] { Ligne + Sep });
}
catch (Exception)
{
break;
}
/// <summary>
/// On récupère la ligne de la ficher lu, avec la lettre de la séparation on dissocie
/// champs par champs et on remplie DGV
/// </summary>
///
private void RecupererLesDonnesss(string Ligne)
{
string mot = "";
//On initialise la liste des donnes
List<string> donnes = new List<string> { };
foreach (char letre in Ligne)
{
//Si la lettre est différant de caractère de séparation
if (Convert.ToString(letre) != Sep)
{
//En ajoutent les lettres on créer un mot
mot = mot + Convert.ToString(letre);
}
//Si la lettre est égale à caractère de séparation
else if (Convert.ToString(letre) == Sep)
{
//On ajoute le mot créer dans la liste des donnes
donnes.Add(mot);
//On initialise le mot
mot = "";
}
}
if (j > 0)
{
//On rajoute une ligne
this.dataGridView1.Rows.Add();
for (int i = 0; i <this.dataGridView1.ColumnCount - 1; i++)
{
//On remplie les cellules de la ligne que on vient de rajouter avec la liste des donnes
this.dataGridView1.Rows[j - 1].Cells[i].Value = donnes[i];
//On écrit numéro de la ligne dans dernière cellule
this.dataGridView1.Rows[j - 1].Cells[i + 1].Value = j - 1;
}
}
else if (j == 0)
{
//On considéré que la première ligne de la ficher comporte le nom des colonnes
//et on créer les entêtes des colonnes avec la liste des donnes
for (int i = 0; i < donnes.Count; i++)
{
}
//On créer une colonne en plus pour numéroter les lignes
//Pour pouvoir utiliser plus tard en cas de suppressions des lignes ou d’autre chose
this.dataGridView1.Columns.Add("Id", "Id");
}
/// <summary>
/// Comme son nom précisé on regle largeurs des cellules apres avoir charger ensemble des donnes dans la DGV...
/// Et on aligne les textes de cellules adroites...
/// </summary>
public void ReglageLargeurDesCellule()
{
if (this.dataGridView1.ColumnCount > 0)
{
for (int i = 0; i <this.dataGridView1.ColumnCount; i++)
{
this.dataGridView1.AutoResizeColumn(i, DataGridViewAutoSizeColumnMode.DisplayedCells);
this.dataGridView1.Columns[i].DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleRight;