[ASP.NET] CheckBoxList werkt niet wanneer data gebind is?

Pagina: 1
Acties:

  • Ramon
  • Registratie: Juli 2000
  • Laatst online: 22:23
Hallo allemaal,

Ik zit met een probleem en ik kom er niet uit. Ik heb gezocht hier op GoT, google en op de forums van de asp.net website.

Situatie
Ik heb een asp:Checkboxlist gemaakt. Deze DataBind ik aan een tabel category uit mijn database. Dit gaat goed. De Checkboxlist wordt bevolkt.

Nu heb ik een asp:button die een functie aanroept die door de listitems van de checkboxlist heen loopt en kijkt of ze geselecteerd zijn. Zoja dan moet er een sql uitgevoerd worden.

Het probleem
Het probleem is dat wanneer ik de CheckboxList gebind heb aan een DataTable, het loopen niet meer werkt. Of echter, het loopen werkt wel. Maar het bepalen of een checkbox wel of niet Selected is, lijkt kapot te zijn.

Onderstaande stukje code draait goed (dit is rechtstreeks geript van .Net SDK ) en draait hier live
C#:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
<html>
<head>
    <script language="C#" runat="server">
      void Button1_Click(object Source, EventArgs e) {
          String s = "Selected items:<br>";
          for (int i=0; i < Check1.Items.Count; i++) 
          {
              if ( Check1.Items[ i ].Selected ) 
              {
                  // List the selected items
                  s = s + Check1.Items[i].Text;
                  s = s + "<br>";
              }    
          }
          Label1.Text = s;
       }
    </script>
</head>
<body>
    <h3><font face="Verdana">CheckBoxList Example</font></h3>
    <form runat=server>
        <asp:CheckBoxList id=Check1 runat="server">
            <asp:ListItem>Item 1</asp:ListItem>
            <asp:ListItem>Item 2</asp:ListItem>
            <asp:ListItem>Item 3</asp:ListItem>
            <asp:ListItem>Item 4</asp:ListItem>
            <asp:ListItem>Item 5</asp:ListItem>
            <asp:ListItem>Item 6</asp:ListItem>
        </asp:CheckBoxList>
        <p>
       <asp:Button id=Button1 Text="Submit" onclick="Button1_Click" runat="server"/>
        <p>
        <asp:Label id=Label1 font-name="Verdana" font-size="8pt" runat="server"/>
    </form>
</body>
</html>


Nu heb ik dit aangepast naar het volgende:
C#:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
<%@ import namespace="System.Data.SqlClient" %>
<%@ import namespace="System.Data" %>
<%@ Page Inherits="CodeBehind" Src="Codebehind.cs" validateRequest="false" %>
<html>
<head>
    <script language="C#" runat="server">
      void Button1_Click(object Source, EventArgs e) {
          String s = "Selected items:<br>";
          for (int i=0; i < Check1.Items.Count; i++) 
          {
              if ( Check1.Items[ i ].Selected ) 
              {
                  // List the selected items
                  s = s + Check1.Items[i].Text;
                  s = s + "<br>";
              }    
          }
          Label1.Text = s;
       }
       
    public void Page_Load(Object sender, EventArgs E)
    {
        Check1.DataSource = SqlSelect( "SELECT * FROM Category");
        Check1.DataBind();
    }   
    </script>
</head>
<body>
    <h3><font face="Verdana">CheckBoxList Example</font></h3>
    <form runat=server>
        <asp:CheckBoxList id=Check1 runat="server" DataTextField="name" DataValueField="category_id">
        </asp:CheckBoxList>
       <asp:Button id=Button1 Text="Submit" onclick="Button1_Click" runat="server"/>

        <asp:Label id=Label1 font-name="Verdana" font-size="8pt" runat="server"/>
    </form>
</body>
</html>

welke hier online staat.
Mijns inziens zou onderstaande code gewoon moeten werken, maar blijkbaar zie ik toch iets over het hoofd. Heeft iemand enig idee? Ik ben hier al best een paar dagen mee bezig. Ik heb ook de oplossing van Riegstar uit dit topic geprobeerd maar dat werkte niet (dezelfde 'fout').

Kan iemand mij hierbij helpen?

Alvast bedankt!

Check mijn V&A ads: https://tweakers.net/aanbod/user/9258/


  • whoami
  • Registratie: December 2000
  • Laatst online: 23:28
Waarom gebruik je ASP.NET op de ASP manier ?

Waarom loop je niet over je data, ipv over je controls ? Maw, ipv je checkboxes te bekijken, waarom bekijk je de data in je data-table niet waar die checkbox aan gebinded is ?

https://fgheysels.github.io/


  • Ramon
  • Registratie: Juli 2000
  • Laatst online: 22:23
Dat weet ik niet? Een gebruikersselectie van een checkbox heeft toch niet automatisch een verandering in de DataTable tot gevolg?

Ik ben me hier al best wel blind op aan het staren dus een werkend voorbeeldje zou ik fijn vinden ( kan ik met google ook echt nergens vinden, overal doen ze OF het binden aan een datatable voor OF het uitlezen van de Checked/Selected van een checkbox, maar alleen statisch... samen lijkt dat gewoon niet te werken? )

Het is overigens de bedoeling dat niet de tabel category aangepast wordt maar dat er een nieuw record in een andere tabel aangemaakt wordt afhankelijk van welke category de gebruiker checked.

Check mijn V&A ads: https://tweakers.net/aanbod/user/9258/


  • Ramon
  • Registratie: Juli 2000
  • Laatst online: 22:23
Oke opgelost...

C#:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
<%@ import namespace="System.Data.SqlClient" %>
<%@ import namespace="System.Data" %>
<%@ Page Inherits="CodeBehind" Src="Codebehind.cs" validateRequest="false" %>
<html>
<head>
    <script language="C#" runat="server">
      void Button1_Click(object Source, EventArgs e) {
          //iets
       }
    
    void check1_changed(object Source, EventArgs E)   
    {
        StringBuilder sb = new StringBuilder();
        foreach( ListItem li in Check1.Items)
        {
            if( li.Selected == true )
            {
                sb.Append("<br>" + li.Value);
            }
        }
        if(sb.Length == 0 )
            Label3.Text = "geen selectie.";
        else
            Label3.Text = sb.ToString();
    }

    void Check1_init(object Source, EventArgs E) 
    {
        DataTable categories = SqlSelect( "SELECT * FROM Category");
        foreach(DataRow myRow in categories.Rows)
        {
            this.Check1.Items.Add(new ListItem(myRow["name"].ToString(), myRow["category_id"].ToString()));
        }
    }
    </script>
</head>
<body>
    <h3><font face="Verdana">CheckBoxList Example</font></h3>
    <form runat=server>
        <asp:CheckBoxList id=Check1 runat="server" OnSelectedIndexChanged="check1_changed" OnInit="Check1_init">
        </asp:CheckBoxList>
       <asp:Button id=Button1 Text="Submit" onclick="Button1_Click" runat="server"/>

    <asp:Label id=Label3 font-name="Verdana" font-size="8pt" runat="server"/>
    </form>
</body>
</html>
Iets als dit wilde ik juist voorkomen, het databinden vind ik eigenlijk een mooiere oplossing, maarja als dat niet werkt dan houdt het op.

Bedankt nog ;)

Check mijn V&A ads: https://tweakers.net/aanbod/user/9258/


  • Dennis
  • Registratie: Februari 2001
  • Laatst online: 00:34
Wat je moet doen is bij het koppelen van de data aan je checkboxlist (in de code behind waarschijnlijk bij het page_load event) is de volgende code opnemen:

C#:
1
2
3
4
if (IsPostBack)
{
  // hier de tabel inladen
}


Als je een submit doet wordt namelijk de data opnieuw ingeladen en 'vergeet' asp.net welke checkbox je had aangevinkt.