Remplir combobox et erreur system.data.datarowview

Résolu
soupiste Messages postés 79 Date d'inscription samedi 12 avril 2008 Statut Membre Dernière intervention 22 juin 2011 - 29 sept. 2009 à 17:02
soupiste Messages postés 79 Date d'inscription samedi 12 avril 2008 Statut Membre Dernière intervention 22 juin 2011 - 7 oct. 2009 à 17:39
salut !

J'ai aujourd'hui un problème, le même qui me semble récurrent sur le forum, mais dont je ne trouve pas la solution:
En effet, je remplis mon combobox d'une liste de feuilles contenues dans un fichier excel par le code suivant:

if (openFDialog.ShowDialog() == DialogResult.OK)
{
LabelFile.Text = openFDialog.FileName;
System.Data.OleDb.OleDbConnection ExcelConnection = null;
System.Data.DataTable ExcelTables = new System.Data.DataTable("TABLE");

try
{
ExcelConnection = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + openFDialog.FileName + ";Extended Properties=" + (char)34 + "Excel 8.0;HDR=Yes;" + (char)34 + ";");
ExcelConnection.Open();
ExcelTables = ExcelConnection.GetOleDbSchemaTable(System.Data.OleDb.OleDbSchemaGuid.Tables, new object[] { null, null, null, "TABLE" });

ComboBoxEx.DataSource = ExcelTables;
ComboBoxEx.DisplayMember = "TABLE";
}
catch (System.Exception ex)
{
MessageBox.Show(ex.Message);
}
finally
{
// ExcelConnection.Close();
}

Le seul résultat que je constate, c'est que mon combobox se rempli de SYSTEM.DATA.DATAROWVIEW
J'ai beau bidouillé pour voir quel était le problème, mais rien à faire, et je traine encore !

De l'aide s'il vous plait !

je développe en C#
A voir également:

6 réponses

soupiste Messages postés 79 Date d'inscription samedi 12 avril 2008 Statut Membre Dernière intervention 22 juin 2011
7 oct. 2009 à 17:39
Grand merci à toi MasterSleepy !

Ce cas marche parfaitement! J'avais auparavant envisagé cette manière de faire, mais je m'étais bloqué à mon foreach qui ne reconnaissait pas mon
" Excel.Worksheet " J'ignorais que appeler using Excel ou using Microsoft.Office.Interop.Excel était différent ! et à propos, j'ai dû modifier ton code pour que ça marche :

Code qui marche :

if (openFDialog.ShowDialog() == DialogResult.OK)
{
LabelFile.Text = openFDialog.FileName;
myApp = new Microsoft.Office.Interop.Excel.Application();
myWkb = myApp.Workbooks.Open(openFDialog.FileName, false, true, 5, "", "", true, XlPlatform.xlWindows, "\t", false, false, 0, false, 1, 0);
allWorkSheet.Clear();

foreach (Excel.Worksheet myWks in myWkb.Worksheets)
{
allWorkSheet.Add(myWks.Name.ToString());
}
ComboBoxEx.DataSource = allWorkSheet;
ComboBoxEx.Refresh();

myWkb.Close(false, System.Type.Missing, System.Type.Missing);
myApp.Quit();

}

J'ai seulement appelé : using Microsoft.Office.Interop.Excel et non using Excel = Microsoft.Office.Interop.Excel

Et donc merci de m'avoir donné le chemin ! Ce code saura certainement servir à bon nombre de personnes !

Salutation !!!!!!!!!!!!!!!!!!!!!!! javascript:void(0);
3
cs_MasterSleepy Messages postés 6 Date d'inscription jeudi 7 décembre 2006 Statut Membre Dernière intervention 6 octobre 2009
5 oct. 2009 à 16:09
Salut,

Essaye de remplacer
ComboBoxEx.DisplayMember = "TABLE";
par
ComboBoxEx.DisplayMember = "TABLE_NAME";

Chez moi cela fonctionne mais il ajoute un "$" à la fin du nom.

++
MasterSleepy.
0
soupiste Messages postés 79 Date d'inscription samedi 12 avril 2008 Statut Membre Dernière intervention 22 juin 2011
5 oct. 2009 à 18:09
Mais, dans ce cas, "TABLE_NAME" serait vu en tant que quoi ?

Toutefois, j'ai bien essayé, et ça marche !
Mais comme tu l'as toi même dis, il y a des expression du type ' et $ à la fin du nom de la feuille.

De même, dans mon application, le nom de feuille sélectionnée dans le combobox doit être renvoyé et sera prise en compte dans une methode qui ouvre le ladite feuille du fichier excel.

Mais, je reçois comme erreur :

[u]L'exception NULLReferenceException n'a pas été gérée par le code utiliseur

La référence d'objet n'est pas définie à une instance d'objet/u

Voici comment j'appelle la valeur sélectionnée dans le combobox:

[b] SheetSelector selectFeuil = new SheetSelector();
string Nomdefeuille = selectFeuil.ComboBoxEx.SelectedItem.ToString();/b



Pouvez vous m'orienter ?
0
soupiste Messages postés 79 Date d'inscription samedi 12 avril 2008 Statut Membre Dernière intervention 22 juin 2011
5 oct. 2009 à 19:05
Ah! vraiment les gars! ce serait bon de finir avec ce problème qui ne m'a que trop fatigué
0

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

Posez votre question
cs_MasterSleepy Messages postés 6 Date d'inscription jeudi 7 décembre 2006 Statut Membre Dernière intervention 6 octobre 2009
6 oct. 2009 à 16:35
Pourquoi ne pas instancier un object Excel et parcourir toutes les worksheets.
J'ai faire un test et voilà

private void button2_Click(object sender, EventArgs e)
{
Excel.Application myApp;
Excel.Workbook myWkb;

if (openFDialog.ShowDialog() == DialogResult.OK)
{
LabelFile.Text = openFDialog.FileName;
myApp = new Excel.Application();
myWkb = myApp.Workbooks.Open(openFDialog.FileName, false, false, System.Type.Missing, System.Type.Missing, System.Type.Missing, System.Type.Missing, System.Type.Missing, System.Type.Missing, System.Type.Missing, System.Type.Missing, System.Type.Missing, System.Type.Missing, System.Type.Missing, System.Type.Missing);
allWorkSheet.Clear();
foreach (Excel.Worksheet myWks in myWkb.Worksheets)
{
allWorkSheet.Add(myWks.Name.ToString());
}
ComboBoxEx.DataSource = allWorkSheet;
ComboBoxEx.Refresh();

myWkb.Close(false, System.Type.Missing, System.Type.Missing);
myApp.Quit();
}
}

Il faut avoir définir
BindingList<String> allWorkSheet;
en entête de class et
allWorkSheet = new BindingList<string>();
dans le constructeur.

++
MasterSleepy.
0
cs_MasterSleepy Messages postés 6 Date d'inscription jeudi 7 décembre 2006 Statut Membre Dernière intervention 6 octobre 2009
6 oct. 2009 à 16:37
J'oubliais il faut un référence a Microsoft.Office.Interop.Excel
et
using Excel = Microsoft.Office.Interop.Excel;

++
0
Rejoignez-nous