Remplir combobox et erreur system.data.datarowview [Résolu]

soupiste
Messages postés
79
Date d'inscription
samedi 12 avril 2008
Dernière intervention
22 juin 2011
- 29 sept. 2009 à 17:02 - Dernière réponse : soupiste
Messages postés
79
Date d'inscription
samedi 12 avril 2008
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#
Afficher la suite 

Votre réponse

6 réponses

Meilleure réponse
soupiste
Messages postés
79
Date d'inscription
samedi 12 avril 2008
Dernière intervention
22 juin 2011
- 7 oct. 2009 à 17:39
3
Merci
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);

Merci soupiste 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 86 internautes ce mois-ci

Commenter la réponse de soupiste
cs_MasterSleepy
Messages postés
6
Date d'inscription
jeudi 7 décembre 2006
Dernière intervention
6 octobre 2009
- 5 oct. 2009 à 16:09
0
Merci
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.
Commenter la réponse de cs_MasterSleepy
soupiste
Messages postés
79
Date d'inscription
samedi 12 avril 2008
Dernière intervention
22 juin 2011
- 5 oct. 2009 à 18:09
0
Merci
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 ?
Commenter la réponse de soupiste
soupiste
Messages postés
79
Date d'inscription
samedi 12 avril 2008
Dernière intervention
22 juin 2011
- 5 oct. 2009 à 19:05
0
Merci
Ah! vraiment les gars! ce serait bon de finir avec ce problème qui ne m'a que trop fatigué
Commenter la réponse de soupiste
cs_MasterSleepy
Messages postés
6
Date d'inscription
jeudi 7 décembre 2006
Dernière intervention
6 octobre 2009
- 6 oct. 2009 à 16:35
0
Merci
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.
Commenter la réponse de cs_MasterSleepy
cs_MasterSleepy
Messages postés
6
Date d'inscription
jeudi 7 décembre 2006
Dernière intervention
6 octobre 2009
- 6 oct. 2009 à 16:37
0
Merci
J'oubliais il faut un référence a Microsoft.Office.Interop.Excel
et
using Excel = Microsoft.Office.Interop.Excel;

++
Commenter la réponse de cs_MasterSleepy

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.