[ASP.NET + DataList] Er wordt een lege datalist getoond*

Pagina: 1
Acties:

  • sig69
  • Registratie: Mei 2002
  • Laatst online: 17:05
Ik ben op m'n stage met Visual Studio .NET aan het spelen. Hartstikke leuk en makkelijk natuurlijk. Dus ik sleep lekker een SQLDataAdapter m'n pagina op, SQL Server selecteren, tabel en query en dat soort dingen. Even testen, ja ziet er goed uit. Daarna een dataset gemaakt en die bij een datagrid als datasource opgegeven. De kolomnamen verspringen mooi in wat het moet zijn dus ik denk: dat gaat lekker. Runnen die handel, en... helemaal niets! Een compleet lege pagina.
Nu ben ik dus al een uur bezig met uit te vogelen wat ik fout doe maar ik begrijp er echt niks van. Visible staat op true, enabled ook. Nog een keer een dataset aangemaakt maar het mag allemaal niet baten. Wat doe ik verkeerd?

Roomba E5 te koop


  • whoami
  • Registratie: December 2000
  • Laatst online: 17:38
Heb je
code:
1
DataList1.DataBind();

gedaan?

https://fgheysels.github.io/


  • sig69
  • Registratie: Mei 2002
  • Laatst online: 17:05
Nee, ik had bij (DataBindings) aangegeven wat er in de datagrid moest komen, dus ik nam eigenlijk aan dat VS dat wel voor mij zou doen. Ook stom, moet je zoiets simpels alsnog zelf gaan zitten tikken.

Maar goed, heb het er nu in zitten en nu krijg ik alleen de kolomkoppen te zien(? vaag hoor). Ik stoei nog wel even verder tot ik het gewenste resultaat heb.

Edit:
Sorry, ik heb een datagrid

[ Voor 6% gewijzigd door sig69 op 06-11-2003 15:16 ]

Roomba E5 te koop


  • whoami
  • Registratie: December 2000
  • Laatst online: 17:38
Is je dataset leeg, of heb je geen databindings gespecifieerd aan de controls die je op je DataList hebt gezet?

https://fgheysels.github.io/


  • sig69
  • Registratie: Mei 2002
  • Laatst online: 17:05
Ok, omdat jij het over een datalist had heb ik ook even een datalist toegevoegd met een label in het itemtemplate en daaraan het naamveld van m'n dataset ge-databind, maar dit geeft hetzelfde resultaat, alleen een kop.

[ Voor 10% gewijzigd door sig69 op 06-11-2003 15:34 ]

Roomba E5 te koop


  • whoami
  • Registratie: December 2000
  • Laatst online: 17:38
sig69 schreef op 06 november 2003 @ 15:31:
Ok, omdat jij het over een datalist had heb ik ook even een datalist toegevoegd en een item aan het naamveld van m'n dataset ge-databind, maar dit geeft hetzelfde resultaat, alleen een kop.
:?
Jij hebt het over een datalist.
Bedoel je dan dat je eerst een datagrid had?

Ok, ja dus. :P

Bevat je DataSet gegevens?

[ Voor 7% gewijzigd door whoami op 06-11-2003 15:34 ]

https://fgheysels.github.io/


  • sig69
  • Registratie: Mei 2002
  • Laatst online: 17:05
Bevat je DataSet gegevens?
Hoe zie ik dat? Als ik bij de dataadapter op preview dat klik, en dan op fill dataset dan krijg ik wel allemaal rijen uit de database te zien.

Wat zit die code van VS trouwens raar in elkaar zeg, heel anders dan in de .NET SDK tutorials.

[ Voor 22% gewijzigd door sig69 op 06-11-2003 15:45 ]

Roomba E5 te koop


  • whoami
  • Registratie: December 2000
  • Laatst online: 17:38
Tja, je dataset zal dus niet gevuld zijn.

Doe eens gek, en zet eens dit in je Page_Load:

code:
1
2
3
4
5
6
if( !this.IsPostback )
{
    myDataAdapter.Fill (myDataset);
    myDataGrid.DataSource = myDataset;
    myDataGrid.DataBind();
}

https://fgheysels.github.io/


  • sig69
  • Registratie: Mei 2002
  • Laatst online: 17:05
Hmmm... dat werkt wel ja. Maar waarom zit ik dan in VS bij mijn DataList en DataGrid een dataset te definiëren? Hoe doe jij dat? In VS of doe je het gewoon zelf? Als ik het in VS doe maakt hij namelijk dit soort code:
code:
1
2
3
4
5
this.dataSet21.DataSetName = "DataSet2";
this.dataSet21.Locale = new System.Globalization.CultureInfo("nl-NL");
this.dataSet21.Namespace = "http://www.tempuri.org/DataSet2.xsd";
this.Load += new System.EventHandler(this.Page_Load);
((System.ComponentModel.ISupportInitialize)(this.dataSet21)).EndInit();

En dan moet ik dus alsnog zelf m'n dataset fillen en databinden.

Roomba E5 te koop


  • whoami
  • Registratie: December 2000
  • Laatst online: 17:38
Die code die je gecopy-pasted hebt, die wordt door vs.net gegenereerd, en daar kom je best zelf niet direct aan.

Ik haal de data op in m'n DAL code. De data die ik dan terugkrijg bind ik in m'n aspx pagina aan m'n controls.

https://fgheysels.github.io/


  • sig69
  • Registratie: Mei 2002
  • Laatst online: 17:05
Zou je kunnen uitleggen wat je daar precies mee bedoelt, of heb je een link naar een artikel/tutorial ofzo? Klinkt namelijk wel interessant. En als ik dan toch aan het proggen ga slaan wil ik het liever ook wel netjes doen.

Edit: heb al wat gevonden op devasp.net

[ Voor 9% gewijzigd door sig69 op 06-11-2003 16:39 ]

Roomba E5 te koop


  • Remco
  • Registratie: Januari 2001
  • Laatst online: 16:11
Hier even een code om een datagrid te vullen met gegevens uit een sql database:

Visual Basic:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        If Not (IsPostBack) Then
            bindgrid()
        End If
    End Sub

    Sub bindgrid()
        myconnection = New SqlConnection("server=computer1;uid=sa;pwd=geheim;database=ars")
        myconnection.Open()
        mycommand = New SqlDataAdapter("select * from t_medewerkers", myconnection)
        ds = New DataSet()
        Dim sourcetable As String
        sourcetable = "t_medewerkers"
        mycommand.Fill(ds, sourcetable)
        mydatagrid.DataSource = ds.Tables("t_medewerkers").DefaultView
        myconnection.Close()
        mydatagrid.DataBind()
    End Sub


De code zal ongetwijfeld sneller kunnen, maar ben ook net pas sinds 2 weken bezig met asp.net dus.......

The best thing about UDP jokes is that I don't care if you get them or not.


  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 20-08 11:40

gorgi_19

Kruimeltjes zijn weer op :9

* gorgi_19 mompelt iets over Connectionstrings in web.config opslaan.
* gorgi_19 mompelt ook iets over niet mixen van SQL en andere code.

Verder vraag ik me af waarom je in dit geval een dataset wilt gebruiken; een SQLDatareader kan in dit geval ook gebruikt worden en is voor dit geval sneller.

Als we toch bezig zijn: het declaren van de variabele sourcetable is nutteloos en kan in principe weggestreept worden.

[ Voor 93% gewijzigd door gorgi_19 op 06-11-2003 23:26 ]

Digitaal onderwijsmateriaal, leermateriaal voor hbo


  • Remco
  • Registratie: Januari 2001
  • Laatst online: 16:11
gorgi_19 schreef op 06 november 2003 @ 23:22:
* gorgi_19 mompelt iets over Connectionstrings in web.config opslaan.
* gorgi_19 mompelt ook iets over niet mixen van SQL en andere code.

Verder vraag ik me af waarom je in dit geval een dataset wilt gebruiken; een SQLDatareader kan in dit geval ook gebruikt worden en is voor dit geval sneller.

Als we toch bezig zijn: het declaren van de variabele sourcetable is nutteloos en kan in principe weggestreept worden.
* Remco vraagt zich af waarom gorgi_19 zoveel mompelt, ook al in andere topics ;)

Zoals ik al zei, ben nog maar 2 weken bezig.
Maar als ik de var sourcetable niet aanmaak, maar doe:
Visual Basic:
1
mycommand.Fill(ds, "t_medewerkers")

dan werkt het niet, maar hoogstwaarschijnlijk zal dat aan mijn capaciteiten liggen.

* Remco mompelt iets over studeren, boeken lezen etc....
* Remco wil meer dan 24 uur in een dag.

The best thing about UDP jokes is that I don't care if you get them or not.


  • whoami
  • Registratie: December 2000
  • Laatst online: 17:38
Wat gorgi wil zeggen, is dat je ook op deze manier kunt binden:
code:
1
myDataGrid.DataSource = ds.Tables[0];

https://fgheysels.github.io/


  • Remco
  • Registratie: Januari 2001
  • Laatst online: 16:11
oh, oke.

Zal het eens wijzigen/onderzoeken.

The best thing about UDP jokes is that I don't care if you get them or not.


  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 20-08 11:40

gorgi_19

Kruimeltjes zijn weer op :9

whoami schreef op 07 november 2003 @ 09:31:
Wat gorgi wil zeggen, is dat je ook op deze manier kunt binden:
code:
1
myDataGrid.DataSource = ds.Tables[0];
En, als je echt snelheid nodig hebt, een datareader sneller is; echter, hierbij zitten wel wat gevaren van connecties niet sluiten e.d.

Verder mag bij mij een datareader nooit verder dan een datalaag komen en ben ik eerder voorstander van (custom) objects c.q. arraylists dan om datatables te gaan gebruiken.

[ Voor 21% gewijzigd door gorgi_19 op 07-11-2003 10:06 ]

Digitaal onderwijsmateriaal, leermateriaal voor hbo


  • whoami
  • Registratie: December 2000
  • Laatst online: 17:38
gorgi_19 schreef op 07 november 2003 @ 10:05:
[...]

Verder mag bij mij een datareader nooit verder dan een datalaag komen
Hiermee ben ik akkoord.
Een datareader gebruik ik enkel in m'n DAL om evt. custom objects of collections op te vullen.
en ben ik eerder voorstander van (custom) objects c.q. arraylists dan om datatables te gaan gebruiken.
Mwah, een DataTable is ook niet mis. Je kan het ook aanzien als een 'gewone' collection.
De DataTable op zich heeft niets meer te maken met de datalaag, en hoeft ook niets af te weten van je databank.
Ik heb er geen problemen mee dat m'n DAL classes methods hebben die een DataTable returnen aan m'n BL of presentatie-laag.

https://fgheysels.github.io/


  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 20-08 11:40

gorgi_19

Kruimeltjes zijn weer op :9

whoami schreef op 07 november 2003 @ 10:13:
[...]

Hiermee ben ik akkoord.
Een datareader gebruik ik enkel in m'n DAL om evt. custom objects of collections op te vullen.
Enige uitzondering: performance.. :P Het zou me niets verbazen als MS in Petshop gebruikt maakt van datareaders voor het binden. :P
Mwah, een DataTable is ook niet mis. Je kan het ook aanzien als een 'gewone' collection.
De DataTable op zich heeft niets meer te maken met de datalaag, en hoeft ook niets af te weten van je databank.
Ik heb er geen problemen mee dat m'n DAL classes methods hebben die een DataTable returnen aan m'n BL of presentatie-laag.
Het grootste nadeel van een datatable vind ik dat ik hem nog moet 'opdelen' naar een businessobject; in ieder geval voor de meeste toepassingen van mij. Stel ik voeg een kolom toe, of wijzig een kolomnaam c.q. verwijder deze, dan moet ik op meerdere plaatsen iets aanpassen en kunnen er fouten door m'n gehele applicatie optreden. (Tenzij je van typed datasets gebruik gaat maken). Bij de 'datareader' methodiek knalt deze er al gelijk in m'n datalaag er uit.

Verder zijn de datatables een stuk trager dan datareaders en hebben ze, in ieder geval voor mij, een hoop 'overhead' bij zich.

Digitaal onderwijsmateriaal, leermateriaal voor hbo


  • sig69
  • Registratie: Mei 2002
  • Laatst online: 17:05
Ik ben nu bezig met een DAL tutorial, maar die is in VB. Aangezien ik C# gebruik, ben ik nu code aan het vertalen. Nu loop ik alleen tegen een klein probleempje aan: ik moet op een gegeven moment bepalen wat voor Exception er afgegven wordt. Dat doe ik met
code:
1
2
3
4
if (exc is SqlClient.SqlException)
{
    processSQLException(exc);
}
Oftwel, als er een SqlException gebeurt wordt er een functie aangeroepen die het verder afhandelt:
code:
1
2
3
4
private void processSQLException(SqlClient.SqlException exc)
{
    //blabla code
}
Nu krijg ik alleen deze foutmelding: "The type or namespace name 'SqlClient' could not be found (are you missing a using directive or an assembly reference?)" Wat ik vreemd vind, want ik gebruik wel
code:
1
using System.Data.SqlClient;

Ik begrijp er nix van 8)7, ik zit er al weer dik een uur naar te staren maar ik zie het echt niet. Iemand?

Roomba E5 te koop


  • whoami
  • Registratie: December 2000
  • Laatst online: 17:38
Herschrijf het eens zo:
code:
1
2
3
private void processSQLException(SqlException exc)
{
}

https://fgheysels.github.io/


  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 20-08 11:40

gorgi_19

Kruimeltjes zijn weer op :9

using System.Data

Nooit opgevallen dat System.Data.SqlClient ook een namespace is.. :P

[ Voor 70% gewijzigd door gorgi_19 op 07-11-2003 16:07 ]

Digitaal onderwijsmateriaal, leermateriaal voor hbo


  • whoami
  • Registratie: December 2000
  • Laatst online: 17:38
Een SqlException zal wel niet in de Data namespace gedefinieerd zijn denk ik, maar wel degelijk in de SqlClient namespace.

Het probleem van sig69 is dat hij wel SqlClient specifieert, maar hij specifieert niet in onder welke namespace SqlClient valt.
Als hij het zo schrijft:
code:
1
private void ProcessError(System.Data.SqlClient.SqlException ex)

zal het ook wel werken.

Echter, aangezien hij System.Data.SqlClient al ge-import heeft, is dit afdoende:
code:
1
private void processError(SqlException ex)

https://fgheysels.github.io/


  • sig69
  • Registratie: Mei 2002
  • Laatst online: 17:05
Damn.. Ok, dat lost in ieder geval iets op. Het levert ook weer een mooie nieuwe foutmelding op: Argument '1': cannot convert from 'System.Exception' to 'System.Data.SqlClient.SqlException'

Wat ik ook weer vreemd vind, want in VB wordt ook niets geconvert. Kan dat eigenlijk wel, een exception converten?

Edit:
using System.Data; zat er al in natuurlijk

[ Voor 30% gewijzigd door sig69 op 07-11-2003 16:04 ]

Roomba E5 te koop


  • whoami
  • Registratie: December 2000
  • Laatst online: 17:38
sig69 schreef op 07 november 2003 @ 16:02:
Damn.. Ok, dat lost in ieder geval iets op. Het levert ook weer een mooie nieuwe foutmelding op: Argument '1': cannot convert from 'System.Exception' to 'System.Data.SqlClient.SqlException'
Je moet expliciet casten.

code:
1
((SqlException)ex).Message;


Trouwens, op welke lijn krijg je die error?

https://fgheysels.github.io/


  • sig69
  • Registratie: Mei 2002
  • Laatst online: 17:05
De fout zat bij
code:
1
processSQLException(exc);
code:
1
processSQLException((SqlException)exc);
lost het op,
code:
1
processSQLException((SqlException)exc.Message);
geeft de foutmelding dat hij geen string naar SqlException kan converteren, maar da's logisch.

[ Voor 12% gewijzigd door sig69 op 07-11-2003 16:13 ]

Roomba E5 te koop


  • whoami
  • Registratie: December 2000
  • Laatst online: 17:38
Je doet misschien het volgende:
code:
1
2
3
4
5
6
7
8
9
10
11
try
{
}
catch( Exception ex)
{
    if( ex is SqlException )
    {
        processSqlException(ex);
    } 

}

Waarbij de signature van processSqlException dit is:
code:
1
void processSqlException (SqlException ex)

:?

Zoja, dan kan je eigenlijk ook dit doen:
code:
1
2
3
4
5
6
7
8
9
10
11
try
{
}
catch( SqlException ex)
{
    // Indien het een sqlexception is, hier afvangen
}
catch( Exception ex)
{
   // anders, deze handling doen
}

https://fgheysels.github.io/


  • sig69
  • Registratie: Mei 2002
  • Laatst online: 17:05
Het zit wel iets anders in elkaar, het gaat om deze tutorial (voor de geinteresseerden): http://www.15seconds.com/issue/030401.htm

Roomba E5 te koop

Pagina: 1