Toon posts:

[C# .NET] Vullen DataGrid mbv Excell sheet

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik probeer met behulp van een excell sheet een datagrid te vullen maar dit gaat niet helemaal goed. Ik hanteer devolgende werkwijze: Allereerst download ik de excell file naar de map upload in de projectmap in de wwwroot. Vervolgens maak ik een DataSet aan van de gegevens in de excell sheet en verbind ik deze aan de DataGrid.

De excell sheet is in rij 1 gevuld met de kolom namen van de grid en in de volgende rijen staan de waarden. Niet elke rij vanaf rij 2 heeft in elke kolom een waarde staan. En dit is dus ook het probleem. In sommige kolommen die niet vanaf bovenaan (rij 2 dus, rij 1 is in z'n geheel gevuld) gevuld zijn worden geen waarden gevonden maar in andere weer wel. Tijdens het debuggen wordt er ook geen waarde weergegeven terwijl deze wel aanwezig is. Als ik de velden vul met een alfanumerieke waarden werkt het wel. Alle celeigenschappen staan gewoon op standaard. Waar loopt het fout?

  • whoami
  • Registratie: December 2000
  • Laatst online: 14:31
Ik snap het niet.
Je zegt dat er geen waarde zit in een bepaalde cel bv, en dat er daar dan ook niets in je dataset geladen wordt, maar dat er wel iets zou moeten getoond worden op je grid? :?

https://fgheysels.github.io/


  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 13:28

gorgi_19

Kruimeltjes zijn weer op :9

Ik ben bang dat er niets anders opzit dan met OleDB een connectie maken naar je Excelsheet en 'handmatig' een datatable aanmaken. Het voordeel hiervan is gelijk dat je je eigen kolommen goed kan definieren (naam en type)

Digitaal onderwijsmateriaal, leermateriaal voor hbo


Verwijderd

Topicstarter
Mijn omschrijving laat te wensen over, mijn excuses. Onder kolom A van de sheet valt een omschrijving, deze zal altijd gevuld zijn. Onder kolom B t/m F vallen waarden die bij de omschrijving horen, deze hoeven niet altijd gevuld te zijn. Onder bijvoorbeeld kolom E is rij 1 gevuld (de kolom naam van de DataGrid) zijn de rijden 2 t/m 6 leeg en rijen 7 en 8 gevuld. Als ik de sheet nu wil inlezen in mijn DataGrid geeft hij de waarden in rij 7 en 8 onder kolom E niet weer.

Ik praat nu over numerieke waarden, als ik het probeer met alfanumerieke waarden werkt het wel. Ik heb in de celeigenschappen van excel alle mogelijke categorieën getest maar geen van allen schijnen te werken.

  • bigbeng
  • Registratie: Augustus 2000
  • Laatst online: 26-11-2021
Ik weet er niet veel vanaf, maar is het misschien een idee om als eerste rij de namen voor je kolommen op te nemen? Misschien dat de dataset op basis van de eerste rij bepaalt welke kolommen wel en niet getoond moeten worden.

Tis maar een ideetje.

Verwijderd

Topicstarter
bigbeng: Dat is nu ook het geval.


Update:
Wat vreemd is is dat bij het debuggen een waarde met de integer 62100 gezien wordt als een lege string "" en de string a gewoon als "a"

  • whoami
  • Registratie: December 2000
  • Laatst online: 14:31
Hoe vul je die tabel op?
Zijn alle waarden onder bv kolom E numeriek, of zitten er ook alfanumerieke waarden tussen?

https://fgheysels.github.io/


Verwijderd

Topicstarter
Alle waarden behalve de omschrijving (kolom A) zijn nummeriek.

edit:
en rij 1 is alfanummeriek, de kolomnamen

Dit geheel is een tussenstap voor het vullen van een tabel. Het kan natuurlijk ook rechtstreeks op de database maar op deze manier kan de gebruiker zien wat er ingevoerd wordt en kunnen de fouten beter afgehandeld worden (moet het natuurlijk wel eerst werken :))

[ Voor 8% gewijzigd door Verwijderd op 22-12-2003 11:54 ]


  • whoami
  • Registratie: December 2000
  • Laatst online: 14:31
Je kan het eens proberen met gorgi_19's tip:

Eerst maak je een DataTable, waaraan je zelf columns gaat gaan adden, en de datatypes etc... goed gaat gaan zetten:

code:
1
2
3
DataTable dt = new DataTable();
dt.Columns.Add("kolom1", System.Type.GetType("System.Double"));
....

https://fgheysels.github.io/


  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 13:28

gorgi_19

Kruimeltjes zijn weer op :9

whoami schreef op 22 december 2003 @ 11:57:
Je kan het eens proberen met gorgi_19's tip:

Eerst maak je een DataTable, waaraan je zelf columns gaat gaan adden, en de datatypes etc... goed gaat gaan zetten:

code:
1
2
3
DataTable dt = new DataTable();
dt.Columns.Add("kolom1", System.Type.GetType("System.Double"));
....
Klopt, sowieso heb je anders kans dat hij gaat flippen als je eerste row een numeriek getal is, en later komen er nog teksten. Ik geloof dat hij alleen of de eerste rij, of een gedeelte van de eerste rijen gaat doorzoeken.

De oplossing die ik noemde is iig de oplossing die ik destijds bij een vergelijkbaar probleem heb gebruikt.

[ Voor 11% gewijzigd door gorgi_19 op 22-12-2003 12:02 ]

Digitaal onderwijsmateriaal, leermateriaal voor hbo


Verwijderd

Topicstarter
Ik begrijp het niet helemaal. Ook als ik een datatable aanmaak zal ik gebruik maken van dezelfde dataset als nu. De dataset die ik nu gebruik maak ik op de volgende manier aan:

code:
1
2
string StrFileName = ff_invoer.PostedFile.FileName.Substring(ff_invoer.PostedFile.FileName.LastIndexOf("\\") + 1) ;
DataSet ds = MaakDataSet("c:/Inetpub/wwwroot/UrenModule/Upload/"+StrFileName);


code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
private DataSet MaakDataSet(string locatie)
{   
    DataSet ds = new DataSet();
    try
    {
        string strConn;
        strConn = "Provider=Microsoft.Jet.OLEDB.4.0;" +
            "Data Source="+locatie+";"+
            "Extended Properties=Excel 8.0;";
        OleDbConnection conn = new OleDbConnection(strConn);           
        OleDbDataAdapter myCommand = new OleDbDataAdapter("SELECT * FROM [Blad1$]", strConn);
        myCommand.Fill(ds); 
        conn.Close();
        return ds;      
    }
    catch (Exception e)
    {
        l_melding.Text = e.Message;
        return ds;
    }
}


Als ik vervolgens de waarde uit de DataSet lees krijg ik een "" waarde terwijl er toch een waarde inzit, wat gaat hieraan veranderen als ik de dataset eerst in een DataTable gooi?

  • whoami
  • Registratie: December 2000
  • Laatst online: 14:31
Je maakt een table, je voegt daar zelf columns aan toe, en dan ga je met je data-adapter die table gaan vullen.

https://fgheysels.github.io/


  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 13:28

gorgi_19

Kruimeltjes zijn weer op :9

* gorgi_19 had het eigenlijk over de recordset doorlopen en zelf toevoegen aan je datatable.

edit:

Wat whoami dus zegt eigenlijk

[ Voor 24% gewijzigd door gorgi_19 op 22-12-2003 13:38 ]

Digitaal onderwijsmateriaal, leermateriaal voor hbo


Verwijderd

Topicstarter
whoami schreef op 22 december 2003 @ 13:37:
Je maakt een table, je voegt daar zelf columns aan toe, en dan ga je met je data-adapter die table gaan vullen.
Okay, zeg dat dit mijn nieuwe table is:
code:
1
2
3
4
DataTable dt = new DataTable();
dt.Columns.Add("omschrijving", System.Type.GetType("System.String"));
dt.Columns.Add("Soort werk",System.Type.GetType("System.Int32"));
dt.Columns.Add("Soort uur",System.Type.GetType("System.Int32"));


Kan ik dan de methode MaakDataSet (zie vorige reply) gebruiken of moet ik voor iedere kolom apart een nieuwe select doen?

  • whoami
  • Registratie: December 2000
  • Laatst online: 14:31
Probeer dit eens:

code:
1
myDataAdapter.Fill (dt);
;

https://fgheysels.github.io/


  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 13:28

gorgi_19

Kruimeltjes zijn weer op :9

Kan ik dan de methode MaakDataSet (zie vorige reply) gebruiken of moet ik voor iedere kolom apart een nieuwe select doen?
Probeer het; mocht het niet lukken kan je dmv een datareader alle kolommen doorlopen.

offtopic:
/me doet whoami nog een keer wat als hij steeds sneller blijft zijn :+

[ Voor 24% gewijzigd door gorgi_19 op 22-12-2003 14:08 ]

Digitaal onderwijsmateriaal, leermateriaal voor hbo


Verwijderd

Topicstarter
Code omgegooid, ipv een dataSet maak ik nu gebruik van een DataTable, de DataGrid is echter nog steeds hetzelfde als voorheen...

Verwijderd

Topicstarter
*bump* nog steeds geen oplossing gevonden, iemand???

  • whoami
  • Registratie: December 2000
  • Laatst online: 14:31
Kan je eens geen screenshot posten van hetgeen je nu hebt, en hoe die datagrid er moet uitzien?

https://fgheysels.github.io/


Verwijderd

Topicstarter
whoami schreef op 24 december 2003 @ 09:03:
Kan je eens geen screenshot posten van hetgeen je nu hebt, en hoe die datagrid er moet uitzien?
whoami, vind je het goed als ik je een mailtje stuur met een screenshot en de excell file? Ik zit op m'n werk, alles zit potdicht en kan geen files uploaden of what so ever

Verwijderd

Ik zit met hetzelfde probleem.
Ik heb een procedure die een dataset returned.
De dataset wordt gevuld met gegevens uit het excel scheet.
ik heb 5 kolommen en 11 rijen.
bij de kolommen waarvan alleen rij 9,10 en 11 gevuld zijn, zijn deze in de dataset leeg.
vul ik nu in dezelfde kolommen rij 8,9,10,11 dus 1 rij eerder dan wordt de dataset wel goed gevuld.
RaRaRa.
Dus het gaat al fout bij het vullen van de dataset en niet met het plaatsen in het grid.

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
DataSet ds = new DataSet();
try
{
string strConn;
strConn = "Provider=Microsoft.Jet.OLEDB.4.0;" +
"Data Source="+locatie+";"+
"Extended Properties=Excel 8.0;";
OleDbConnection conn = new OleDbConnection(strConn);
conn.Open();
OleDbDataAdapter myCommand = new OleDbDataAdapter("SELECT * FROM [Blad1$]", strConn);
myCommand.Fill(ds); 
conn.Close();
return ds;
Pagina: 1