[ASP.NET] DataList *

Pagina: 1
Acties:

  • whoami
  • Registratie: December 2000
  • Laatst online: 10:17

Ik ben even bezig met ASP.NET aan het spelen.

Ik heb een webform met daarop een DataList control. Ik wil in die datalist gegevens weergeven uit een databank (hoe kan je het raden).

Daartoe heb ik volgende code:

code:
1
2
3
dlContacts = ContactData.GetContacts (userId, 
                                      ConfigurationSettings.AppSettings["dsn"]);
dlContacts.DataBind();


Die GetContacts method geeft dus een DataSet terug met daarin alle gegevens van alle contactpersonen van een bepaalde user.

De ItemTemplate van m'n datalist ziet er als volgt uit:

code:
1
2
3
4
5
6
<ItemTemplate>
    Naam:
    <asp:Label id=lblContactNaam runat="server" 
     Text='<%# DataBinder.Eval(Container, "Familienaam") %>'>
    </asp:Label>
</ItemTemplate>



So far so good zou je denken, echter, bij het runnen krijg ik de fout:
DataBinder.Eval: 'System.Web.UI.WebControls.DataListItem' does not contain a property with the name Familienaam
Ik snap niet hoe deze fout nu kan ontstaan. Ik ben er nl. zeker van dat ik wel een item 'Familienaam' heb in die dataset.
Ik heb m'n SP bekeken, en die column zit er idd in.

Ik heb ook die dataset eens aan een datagrid 'gebinded' waar de autogenerate columns op true staan, en daar zie ik die familienaam column ook.

Ik krijg die fout bij gelijk welke column ik wil binden aan m'n datalist.

Heeft er iemand een idee wat ik fout doe, of over het hoofd zie?

[ Voor 9% gewijzigd door whoami op 22-05-2003 16:12 ]

https://fgheysels.github.io/


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

gorgi_19

Kruimeltjes zijn weer op :9

Is het niet:

Text='<%# DataBinder.Eval(Container.DataItem, "Familienaam") %>'>

* gorgi_19 heeft geen idee of het de defaultproperty is.

En verder zag ik:
C#:
1
dlContacts = ContactData.GetContacts (userId, ConfigurationSettings.AppSettings["dsn"]);

Moet dit niet zijn:
C#:
1
dlContacts.DataSource = ContactData.GetContacts userId, ConfigurationSettings.AppSettings["dsn"]);

[ Voor 86% gewijzigd door gorgi_19 op 22-05-2003 16:18 ]

Digitaal onderwijsmateriaal, leermateriaal voor hbo


  • whoami
  • Registratie: December 2000
  • Laatst online: 10:17
Dat is het inderdaad.

Ik heb er gewoon overgekeken.

Ik had nl. die code gedeeltelijk laten 'genereren' door op 'Databindings' te klikken in de Property page van dat label. Daar had ik gekozen voor 'Container' en DataItem en dan op OK geklikt.

De volgende code werd dan voor mij gegenereerd:

code:
1
<% #DataBinder.Eval(Container, "DataItem")%>


Op die manier moest ik alleen maar die "DataItem" te gaan vervangen door de veldnaam die ik wou.

Thx.

edit:
ff wat bijgetyped:


Dat van die DataSource is goed hoor. Ik had dat inderdaad hier verkeerdelijk gepost. ;)

[ Voor 12% gewijzigd door whoami op 22-05-2003 16:22 ]

https://fgheysels.github.io/


  • whoami
  • Registratie: December 2000
  • Laatst online: 10:17
Ik heb nog een vraagje....

Als je gegevens toont in een DataGrid, dan kan je die makkelijk wijzigen door gebruik te maken van een EditCommandColumn. (Je gaat een EditCommandColumn aan je datagrid toevoegen, en je schrijft de nodige eventhandlers...)

Nu is mijn vraag, wat is de beste manier om in een datalist gegevens te wijzigen? Je kunt de verschillende item-templates gaan instellen, maar wat is nu de beste manier om aan te geven welk item je wilt gaan wijzigen ?

https://fgheysels.github.io/


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

gorgi_19

Kruimeltjes zijn weer op :9

* gorgi_19 snapt het niet.
Je hebt toch een itemtemplate en een edititemtemplate?

Zie ook: http://samples.gotdotnet....talist.aspx#selectandedit

Of doel je op de EditItemIndex property van de datalist?

[ Voor 55% gewijzigd door gorgi_19 op 22-05-2003 16:54 ]

Digitaal onderwijsmateriaal, leermateriaal voor hbo


  • whoami
  • Registratie: December 2000
  • Laatst online: 10:17
gorgi_19 schreef op 22 May 2003 @ 16:52:
* gorgi_19 snapt het niet.
Je hebt toch een itemtemplate en een edititemtemplate?
* whoami heeft het misschien niet goed uitgelegd.

Idd, je hebt een Item en een EditItemTemplate. Allemaal goed en wel.
Ik bedoel gewoon: op welke manier ga je aangeven welke 'row' in je DataList je wilt gaan Editten.
In een DataGrid doe je dat met een EditCommandColumn, maar wat is de beste manier om dat met een DataList te doen?

https://fgheysels.github.io/


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

gorgi_19

Kruimeltjes zijn weer op :9

http://samples.gotdotnet....s/customize/datalist7.src

't is een beetje vaag om uit te leggen; ik denk dat je het met dit voorbeeld moet redden.
Een kleine uitleg er bij:

HTML:
1
2
3
<asp:linkbutton CommandName="Edit" runat="server">
[img]"/quickstart/aspplus/images/edit_book.gif"[/img]
</asp:linkbutton>

Dit stukje zorgt er voor dat er een postback wordt gestuurd. Automatisch wordt ook meegestuurd vanuit welk item de postback wordt verstuurd.

Visual Basic .NET:
1
2
3
4
5
   Sub MyDataList_Edit(Sender As Object, E As DataListCommandEventArgs)

        MyDataList.EditItemIndex = CInt(e.Item.ItemIndex)
        PopulateList()
    End Sub

MyDataList.EditItemIndex
Iedere waarde boven de -1 geeft aan dat de edititemtemplate 'geactiveerd' moet worden. e.item.itemindex vangt het 'itemindextemplatenummer' op van waaruit de eerder genoemde linkbutton is gestuurd.

Visual Basic .NET:
1
2
3
4
5
6
7
8
9
10
11
    Sub MyDataList_Update(Sender As Object, E As DataListCommandEventArgs)

        ' database update left out for simplicity's sake...

        Dim EditText As HtmlInputText
        EditText = E.Item.FindControl("edit_price")

        Message.InnerHtml = "Price Updated: " & EditText.Value
        MyDataList.EditItemIndex = -1
        PopulateList()
    End Sub

Update de boel. editItemIndex wordt nu weer op -1 gezet; dit betekent dat alle standaard ItemTemplates getoond moeten worden. :)

Samengevat
Zet er een linkbutton in je datalist. :+

[ Voor 61% gewijzigd door gorgi_19 op 22-05-2003 17:05 ]

Digitaal onderwijsmateriaal, leermateriaal voor hbo


  • whoami
  • Registratie: December 2000
  • Laatst online: 10:17
Ok.
Met die samenvatting had ik al genoeg hoor. ;) Thx

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 22 May 2003 @ 17:06:
Ok.
Met die samenvatting had ik al genoeg hoor. ;) Thx
Zeg dat dan meteen :P.. Scheelt weer een tijd.. :+

Digitaal onderwijsmateriaal, leermateriaal voor hbo


  • Scharnout
  • Registratie: November 2000
  • Laatst online: 19-08 17:23

Scharnout

Meuk

Is het gezellig met zijn tweetjes :p

Nu we toch aan het datalisten zijn.

Met DataGrid kan je ook makkelijk een row toevoegen en dan kan je van je edit button of linkbutton erg makkelijk de tekst veranderen. Alleen dat is met nog niet zo gelukt met een datalist (die qua lay-out mogelijkheden mij beter bevalt).

Iemand nog weten hoe je een dropdownlist maakt in het edit gedeelte en gelijk het goeie item moet selecteren? Ik heb er net een uurtje of 12 aan besteed :o

And Bob's your uncle ...


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

gorgi_19

Kruimeltjes zijn weer op :9

Scharnout schreef op 22 May 2003 @ 23:10:
Is het gezellig met zijn tweetjes :p

Nu we toch aan het datalisten zijn.

Met DataGrid kan je ook makkelijk een row toevoegen en dan kan je van je edit button of linkbutton erg makkelijk de tekst veranderen. Alleen dat is met nog niet zo gelukt met een datalist (die qua lay-out mogelijkheden mij beter bevalt).
Een datagrid is vrij 'standaard' presentatie; bijvoorbeeld voor tabellen waar weinig opmaak noodzakelijk is. Een Datalist biedt meer flexibiliteit; echter deze is iets lastiger te implementeren :P
Iemand nog weten hoe je een dropdownlist maakt in het edit gedeelte en gelijk het goeie item moet selecteren? Ik heb er net een uurtje of 12 aan besteed :o
http://aspalliance.com/das/dgcombo.aspx O-)

Digitaal onderwijsmateriaal, leermateriaal voor hbo


  • Scharnout
  • Registratie: November 2000
  • Laatst online: 19-08 17:23

Scharnout

Meuk

gorgi_19 schreef op 22 May 2003 @ 23:37:
[...]

Een datagrid is vrij 'standaard' presentatie; bijvoorbeeld voor tabellen waar weinig opmaak noodzakelijk is. Een Datalist biedt meer flexibiliteit; echter deze is iets lastiger te implementeren :P
En nu antwoord geven op mijn vraag :Y)
Ja alleen best leuk dat het in c# en met codebehind toch net iets anders werkt :+ En nog leuker dat dit niet de enige manier is. Ik heb welgeteld 5 manieren gezien om het te bereiken en ik heb die gemixt tot manier 6 :)

And Bob's your uncle ...


  • whoami
  • Registratie: December 2000
  • Laatst online: 10:17
Nog een vraagje. :o

Als je je Templates maakt dmv de Template Editor, dan worden ze in 'Flow layout' weergegeven. Bestaat er geen mogelijkheid om ze in 'Grid layout' op te bouwen?

https://fgheysels.github.io/


Verwijderd

Scharnout:
in je dropdown heb je een property items
code:
1
myDropdown.Items.FindByValue("value").Selected = true

Je kunt het ook via FindByText doen, als je multie select hebt aanstaan kun je er meer selecteren, ander is de laatste die je geselecteerd hebt de geselecteede waarde.

whoami:
Als je in een itemtemplate gebruikt wel maken van positionering met je gebruik gaan maken van relative positionering (dacht ik), of igg positionering op het parent object.
En daar gaat Visual Studio zelf niet vanuit, en daar kan die ook echt goed mee overweg.
Misschien als je het zelf (met de hand) insteld, dat die het dan wel goed doet,
dit heb ik zelf niet geprobeerd (heb het dirrty opgelost een een statische tabel)

  • Woy
  • Registratie: April 2000
  • Niet online

Woy

Moderator Devschuur®
whoami schreef op 23 May 2003 @ 09:44:
Nog een vraagje. :o

Als je je Templates maakt dmv de Template Editor, dan worden ze in 'Flow layout' weergegeven. Bestaat er geen mogelijkheid om ze in 'Grid layout' op te bouwen?
Ik denk dat je dan een panel toe zal moeten voegen met GridLayout.

“Build a man a fire, and he'll be warm for a day. Set a man on fire, and he'll be warm for the rest of his life.”


  • whoami
  • Registratie: December 2000
  • Laatst online: 10:17
Daar had ik idd ook al aan gedacht. Ik heb een HTML gridLayout panel gebruikt, maar de controls die ik erop plaats, komen er toch in 'flow layout' op. :?
Ook als ik handmatig in de Style property de position op absolute zet, lukt het niet.

https://fgheysels.github.io/


  • Woy
  • Registratie: April 2000
  • Niet online

Woy

Moderator Devschuur®
Inderdaad ik heb het ook even uitgeprobeerd. Je kan wel je gridlayout panel even buiten je datalist editen en dan in je Itemtemplate slepen. Het gaat er dan wel een beetje vreemd uit zien. Het zal wel weer een bugje in de editor van VS.NET zijn want ik kan niet bedenken waarom het niet zou moeten kunnen.

“Build a man a fire, and he'll be warm for a day. Set a man on fire, and he'll be warm for the rest of his life.”


Verwijderd

Maar als je er even overnadenkt, is het toch vrijlogisch....

absolute positionering vind plaats van het coordinaat 0,0 van de pagina. Dus als je componenten absoluut positioneert in een data list, komen ze over elkaar heen!

Daarom met je ze relatief positineren, dan werkt het wel. Heb het niet ZELF getest,
normaal ben ik degene die wordt uitgemaakt dat zelf niks uitzoekt. Maar ik geef in mijn vorige topic al een voorzet!!

Minpuntje voor whoami :>

Maar als ik dit in mijn item template zet werkt het !!!!!!!!

<asp:Label id="Label1" style="Z-INDEX: 101; LEFT: 25px; POSITION: relative; TOP: 25px" runat="server">Label</asp:Label>

Alleen kun je dan niet meer visueel met het component werken. Dan krijg je zo'n fout component object :(.
Helaas kan VS niet omgaan met reletieve positionering

  • Woy
  • Registratie: April 2000
  • Niet online

Woy

Moderator Devschuur®
Verwijderd schreef op 23 mei 2003 @ 11:35:
Helaas kan VS niet omgaan met reletieve positionering
Dit kan VS wel degelijk. Als je een HTML gridlayout panel toevoegt dan resulteert dit in de volgende HTML

HTML:
1
<DIV style="WIDTH: 274px; POSITION: relative; HEIGHT: 113px" ms_positioning="GridLayout">


en dit werkt ook gewoon goed. Alleen als je dit echter in een ItemTemplate van een DataList doet dan werkt het niet meer visueel. Dat is dus het probleem. Als je het zelf intypt dan werkt het wel gewoon goed. Bugje dus imho

“Build a man a fire, and he'll be warm for a day. Set a man on fire, and he'll be warm for the rest of his life.”


Verwijderd

Ik kan het hier zo niet instellen in vs 2002, heb 2003 cd's wel al op het burau liggen....

Als ik het zo wil doen, dan moet ik het zelf intypen. In plaats van instellen

  • Woy
  • Registratie: April 2000
  • Niet online

Woy

Moderator Devschuur®
Wat zet VS.NET 2002 bij jou dan in je source als je uit je toolbox een HTML Gridlayout panel op je scherm sleept. Bij mij zet hij dan gewoon de HTML die ik net al poste in mijn source en dat werkt perfect. Alleen in de datalist werkt het bij mij niet. Ik werk hier ook gewoon met VS.NET 2002 aangezien ik voor het 1.0 framework aan het ontwikkelen ben.

“Build a man a fire, and he'll be warm for a day. Set a man on fire, and he'll be warm for the rest of his life.”


Verwijderd

Sorry, ik heb WEER niet goed gekeken,

het is een html control een geen webform control.

Dan zet die de code erneer die jij typt.
Als je dezelfde code in de aspx html gedeelte plakt in je itemtemplate plakte werkt het goede. Alleen je moet templatebuilder niet meer openen, want dat ziet er niet!!

Hier hebben we op de server ook nog het framework 1.0 draaien, daarom nog geen 2003 op dit pc'tje.....
Pagina: 1