Toon posts:

[ASP.NET] datagebonden checkboxlist in datalist

Pagina: 1
Acties:

Verwijderd

Topicstarter
Dit is wat het zou moeten worden maar dan dynamisch.

Dit is de datalist zoals hij nu is:
code:
1
2
3
4
5
6
7
8
9
10
11
<asp:DataList id="DataList1" runat="server" >
    <ItemTemplate>

        <asp:CheckBoxList Runat=server  ID=??????  >
        </asp:CheckBoxList>

        <asp:Button Text=wijzigen Runat=server>
        </asp:Button>
                            
    </ItemTemplate>
</asp:DataList>
Hoe zorg je ervoor dat je chekboxlist een uniek id krijgt met :
code:
1
<%# databinder.eval(container.dataitem,"ID")  %>

Lukt dit niet :
code:
1
2
3
Parser Error Message: 
'<%# databinder.eval(container.dataitem,"id") %>' 
is not a valid identifier.


Deze checkboxlistists (checkboxlisten ?) komen uit een database en krijgen per rij in de datalist andere (selected) waarden. (zie hier)

Hoe moet ik deze waarden meegeven?

Als deze dan al een uniek id hebben zou ik deze checkboxlisten dan kunnen "databinden" in een loop?

Ten slotte nog een vraag is een datalist hiervoor wel de beste oplossing? zo niet wat dan wel ?

  • whoami
  • Registratie: December 2000
  • Nu online
Waarom wil je die checkboxen een uniek id geven?
Als je een datalist hebt, maak je itemtemplates, edititemtemplates en dergelijke. Het ID (de naam) van de controls die je definieert zijn wel uniek binnen de huidige row, maar voor de volgende row hebben ze wel dezelfde naam.
Volgens mij zou je de waarden uit de DB ook kunnen 'databinden' aan je CheckBoxList zonder gebruik te maken van een loop.

https://fgheysels.github.io/


Verwijderd

Topicstarter
Ik dacht dat ik die checkboxen een unieke naam moest geven omdat ik in elke lijst verschillende checkboxen wil aanvinken. Dus per rij in de datalist komt dezelfde checkboxlist met verschillende waarden aangevinkt. Die waarden (true of false) staan in een database. Maar daarvoor heb je dus geen unieke namen nodig voor je checkboxlist?

Maar zover zit ik helaas nog niet. Het lukt me nu zelfs nog niet om een checkboxlist in een datalist te binden aan een database. zou dit moeten lukken?
Visual Basic .NET:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
Private Sub Page_Load
        Dim objconn As New OleDbConnection
        Dim oledbcomm As OleDbCommand
        Dim sql As String
        Dim CBLactiviteiten As CheckBoxList = FindControl("CBLactiviteiten")

        ' CBLactiviteiten is de checkboxlist in de datalist

        objconn.Open()

        sql = "SELECT * FROM lln ORDER BY naam asc;"
        oledbcomm = New OleDbCommand(sql, objconn)
        DataList1.DataSource = oledbcomm.ExecuteReader()
        DataList1.DataBind()

        sql = "SELECT item_item FROM items;"
        oledbcomm = New OleDbCommand(sql, objconn)
        CBLactiviteiten.DataSource = oledbcomm.ExecuteReader()
        CBLactiviteiten.DataBind()

        objconn.close()

end sub


Deze error komt eruit: Object reference not set to an instance of an object. deze wordt veroorzaakt door :
Visual Basic .NET:
1
CBLactiviteiten.DataSource = oledbcomm.ExecuteReader()

Dus wordt CBLactiviteiten niet gevonden?

(wel wat vreemd ik zet enters tussen mijn code en er komt witruimte aan de boven en onderkant maar niet er tussen :?)

  • whoami
  • Registratie: December 2000
  • Nu online
Je moet weten dat een DataReader de connectie exclusief voor zich houd tot wanneer de reader gesloten wordt. (Dit staat in de help over DataReaders trouwens).
Na de DataList1.DataBind() zal je dus je eerste reader moeten sluiten:
code:
1
2
3
4
OleDbDataReader dr1  = OleDbCommand1.ExecuteReader();
DataList1.DataSource = dr1;
DataList1.DataBind();
dr1.Close();


Los daarvan vind ik echter dat het gebruiken van een DataReader in je ASP.NET pagina geen goede zaak is. Daarmee ga je nl. je data-laag verweven met je presentatie-laag.

https://fgheysels.github.io/


Verwijderd

Topicstarter
Ik heb in mijn originele code dit staan:
code:
1
OleDbDataReader dr1  = OleDbCommand1.ExecuteReader(CommandBehavior.CloseConnection);
Maar om de layout hier de sparen heb ik CommandBehavior.CloseConnection weggelaten en idd vergeten de verbinding te sluiten.
Maar waar zou ik die datalaag dan moeten plaatsen? Ik vermoed dat jij meer in die richting denkt? Eigenlijk heb ik geen idee waar ik die code zou moeten plaatsen.

Mijn hoofdprobleem blijft nog altijd dat ik die checkboxlist in een datalist niet aan een database kan hangen.

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

gorgi_19

Kruimeltjes zijn weer op :9

Verwijderd schreef op 10 July 2003 @ 11:26:
Maar waar zou ik die datalaag dan moeten plaatsen? Ik vermoed dat jij meer in die richting denkt? Eigenlijk heb ik geen idee waar ik die code zou moeten plaatsen.
Dat voorbeeld wat ik aanhaal is wel een voorbeeld van een hele extreme scheiding tussen DAL en BLL. In feite is die hier zelfs volledig ontkoppelbaar van de gehele applicatie en echt niet de enige goede methode, maar een methode.

[ Voor 35% gewijzigd door gorgi_19 op 10-07-2003 11:29 ]

Digitaal onderwijsmateriaal, leermateriaal voor hbo


  • whoami
  • Registratie: December 2000
  • Nu online
Verwijderd schreef op 10 juli 2003 @ 11:26:
Ik heb in mijn originele code dit staan:
code:
1
OleDbDataReader dr1  = OleDbCommand1.ExecuteReader(CommandBehavior.CloseConnection);
Maar om de layout hier de sparen heb ik CommandBehavior.CloseConnection weggelaten en idd vergeten de verbinding te sluiten.
Je moet niet alleen je connectie sluiten (die hoef je eigenlijk nog niet te sluiten), maar je moet wel je DataReader sluiten. Die 'CommandBehavior.CloseConnection' zorgt er gewoon voor dat, als je je datareader sluit, de gebruikte connectie ook gesloten wordt. Die Commandbehavior gaat er niet voor zorgen dat de reader gesloten wordt.
Maar waar zou ik die datalaag dan moeten plaatsen? Ik vermoed dat jij meer in die richting denkt? Eigenlijk heb ik geen idee waar ik die code zou moeten plaatsen.
Je datalaag is een set classes die CRUD (create read update delete) functionaliteit bevatten voor je data.
Je kan een nieuw project maken (class library) met die classes in, en dat project hang je dan in je solution.

[ Voor 5% gewijzigd door whoami op 10-07-2003 11:30 ]

https://fgheysels.github.io/


Verwijderd

Topicstarter
Bedankt voor de tips. Ik heb dit gevonden, met deze informatie moet het me geloof ik wel lukken om checkboxen toe te voegen (dan wel in een datagrid en in vb.net).

Hier staat ook nog iets indezelfde stijl. Met een demo.

Ook dit is het lezen/proberen waard.


Deze is geen winform datagrid ;)

/me heeft nog veel te leren over ASP.NET

[ Voor 67% gewijzigd door Verwijderd op 10-07-2003 19:15 . Reden: linkjes toegevoegd ]


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

gorgi_19

Kruimeltjes zijn weer op :9

Verwijderd schreef op 10 July 2003 @ 15:05:
Bedankt voor de tips. Ik heb dit gevonden, met deze informatie moet het me geloof ik wel lukken om checkboxen toe te voegen (dan wel in een datagrid en in vb.net).

Hier staat ook nog iets indezelfde stijl. Met een demo.

Ook dit is het lezen/proberen waard.
Die laatste is iig winforms en geen webforms. Die daarvoor lijkt me trouwens ook redelijk winforms; achterliggende code iig nog niet bekeken, maar wat ik zo op het eerste gezicht zag. :)

Digitaal onderwijsmateriaal, leermateriaal voor hbo


Verwijderd

Topicstarter
Ok zo is het dus mogelijk:

Je download deze webcontrol en zorgt ervoor dat die dll in je bin dir komt te staan.

dit gaat bovenaan de pagina waarin de datagrid komt
code:
1
2
<%@ Register TagPrefix="mbbbc" Namespace="Metabuilders.Webcontrols" 
Assembly="MetaBuilders.WebControls.BoundBooleanColumn" %>

dit is dan de datagrid
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<asp:datagrid id="DataGrid1" runat="server" AutoGenerateColumns="False">
    <Columns>
        <asp:BoundColumn DataField="item1" HeaderText="kolom">
        </asp:BoundColumn>
        
        <asp:BoundColumn DataField="item2" HeaderText="nog een kolom">
        </asp:BoundColumn>
        
        <asp:EditCommandColumn ButtonType="PushButton" UpdateText="Update" 
        HeaderText="editen en zo " CancelText="Cancel" EditText="Edit">
        </asp:EditCommandColumn>
        
        <mbbbc:boundbooleancolumn datafield="bln" readonly=true 
        selectionmode=checkbox allownull=false nulldefault=true>                    
        </mbbbc:boundbooleancolumn> 
        
    </Columns>
</asp:datagrid>

waarin item2, item1 en bln kolommen zijn uit een dataset. Bln is de kolom met de waarden van de checkbox.
Pagina: 1