[asp.net/C#] Menu met DataList met submenuitems...

Pagina: 1
Acties:

  • The-MeLLeR
  • Registratie: Juni 2004
  • Laatst online: 27-02 11:20
Jow tweakers! :)

Ik wil in asp.net een menu opbouwen aan de hand van een typed dataset.

ik heb nu de volgende code:

ASP-file:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<asp:datalist id="MyList" EnableViewState="false" SelectedItemStyle-BackColor="dimgray" width="145"
                cellspacing="0" cellpadding="3" runat="server">
                <SelectedItemStyle BackColor="DimGray"></SelectedItemStyle>
                <SelectedItemTemplate>
                    <P>
                        <asp:HyperLink id=HyperLink2 runat="server" NavigateUrl='<%# "productslist.aspx?CategoryID=" + DataBinder.Eval(Container.DataItem, "CategoryID") + "&amp;selection=" + Container.ItemIndex %>' Text='<%# DataBinder.Eval(Container.DataItem, "CategoryName") %>' cssclass="MenuSelected">
                        </asp:HyperLink></P>
                    <P>
                        <asp:DataList id="SubList" EnableViewState="False" SelectedItemStyle-BackColor="dimgray" runat="server"
                            CellPadding="3" CellSpacing="0" Width="145">
                            <SelectedItemStyle BackColor="DimGray"></SelectedItemStyle>
                            <ItemTemplate>
                                <asp:HyperLink ID=SubCatLink runat=server NavigateUrl='<%# "productslist.aspx?CategoryID=" + DataBinder.Eval(Container.DataItem, "CategoryID") + "&amp;selection=" + Container.ItemIndex %>' Text='<%# DataBinder.Eval(Container.DataItem, "CategoryName")%>' CssClass="MenuSelected">
                                </asp:HyperLink>
                            </ItemTemplate>
                        </asp:DataList></P>
                </SelectedItemTemplate>
                <ItemTemplate>
                    <asp:HyperLink id=HyperLink1 runat="server" NavigateUrl='<%# "productslist.aspx?CategoryID=" + DataBinder.Eval(Container.DataItem, "CategoryID") + "&amp;selection=" + Container.ItemIndex %>' Text='<%# DataBinder.Eval(Container.DataItem, "CategoryName") %>' cssclass="MenuUnselected">
                    </asp:HyperLink>
                </ItemTemplate>
            </asp:datalist>


codebhind:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
...
    private void Page_Load(object sender, System.EventArgs e)
    {
        String selectionId = Request.Params["selection"];
        if (selectionId != null) 
        {
            MyList.SelectedIndex = Int32.Parse(selectionId);                            
            DSCategory dsSubCat =null;
            BLCategory blSubCat = new BLCategory();
            blSubCat.GetSubCategories(Int32.Parse(selectionID), out dsSubCat);
            SubList.DataSource = dsSubCat;
            SubList.DataBind();

        }

        // Obtain list of menu categories and databind to list control
            
        DSCategory dsCat = null;
        BLCategory blCat = new BLCategory();
        blCat.GetRootCategories(out dsCat);
            
        MyList.DataSource = dsCat;          
        MyList.DataBind();
...


Ik krijg nu echter elke keer een NullReferenceException...

Enig idee hoe ik dit kan oplossen?

Ik heb al wat ge-googled maar niks nuttis kunnen vinden....

  • vogeltje
  • Registratie: December 2001
  • Laatst online: 10-08-2025
zonder echt nadrukkelijk naar de code gekeken te hebben, lijkt het mij wel handig als je zelf wat meer gaat debuggen. Op welke regel treed die NullReferenceException op? etc.. meer zelf debuggen dus.... :)

binnenkort een hele dikke casemod :P


  • Woy
  • Registratie: April 2000
  • Niet online

Woy

Moderator Devschuur®
NullReferenceException betekent dat je een method uit probeert te voeren op een reference die naar NULL wijst. In dit geval had je door te kunnen debuggen kunnen zien dat dit plaats vindt op regel 11 van de code die je hier plaatst.

Dit komt doordat SubList nog null is. Je zou denk beter het ItemDataBound event af kunnen vangen en daar door Item.FindControl( "SubList" ) de data goed kunnen zetten als het het selectedItem is.

“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: 06-05 15:36
Waar krijg je die NullReferenceException ?
Heb je je code al eens gedebugged ? Ik denk het niet, want als je dat al zou gedaan hebben, dan zou je de exacte regel kunnen zien waar het misloopt.
Een NullReferenceException duidt op een stuk geheugen dat niet gealloceerd is dat je wilt uitlezen.
Jouw probleem zal 'm dus in die DataSet zitten die je op null initializeert.
Je geeft dus een null door aan je DataAdapter, en dat lukt natuurlijk niet. Ipv null door te geven, zal je dus een gealloceerde dataset moeten meegeven.

https://fgheysels.github.io/


  • The-MeLLeR
  • Registratie: Juni 2004
  • Laatst online: 27-02 11:20
Ik heb uiteraard gedebugged :P

De nullreference vind plaats op de SubList. (SubList.DataSource).
Dit komt denk ik doordat ik een datalist in een datalist heb. Dit is dus fout.
Maar ik heb geen idee hoe ik wel moet doen.

  • vogeltje
  • Registratie: December 2001
  • Laatst online: 10-08-2025
The-MeLLeR schreef op dinsdag 21 juni 2005 @ 10:00:
Ik heb uiteraard gedebugged :P

De nullreference vind plaats op de SubList. (SubList.DataSource).
Dit komt denk ik doordat ik een datalist in een datalist heb. Dit is dus fout.
Maar ik heb geen idee hoe ik wel moet doen.
ik zou eerst maar eens gewoon een instantie aanmaken van je DataSet, voordat je em gaat gebruiken in een DataAdapter. Kijk dan nog maar eens wat er dan gebeurt.

binnenkort een hele dikke casemod :P


  • TlighT
  • Registratie: Mei 2000
  • Laatst online: 22-03 10:40
Die SubList staat in een template, die kun je niet op dezelfde manier aanroepen als een control die niet in een template staat. Je moet dan de FindControl() functie gebruiken in de ItemDataBound event van de betreffende datalist (MyList) en daar je SubList control binden.

[ Voor 10% gewijzigd door TlighT op 21-06-2005 10:31 ]


  • The-MeLLeR
  • Registratie: Juni 2004
  • Laatst online: 27-02 11:20
thx dat ga ik proberen

  • Woy
  • Registratie: April 2000
  • Niet online

Woy

Moderator Devschuur®
TlighT schreef op dinsdag 21 juni 2005 @ 10:29:
Die SubList staat in een template, die kun je niet op dezelfde manier aanroepen als een control die niet in een template staat. Je moet dan de FindControl() functie gebruiken in de ItemDataBound event van de betreffende datalist (MyList) en daar je SubList control binden.
Ja wat ik zei dus :P

“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.”


  • The-MeLLeR
  • Registratie: Juni 2004
  • Laatst online: 27-02 11:20
Ik heb nu gedaan wat jullie zeiden... Alleen heb ik het probleem dat m'n "CategoryList_SelectedIndexChanged" nooit aangeroepen word. Als ik debug en op die methode een breakpoint hang gebeurt er helemaal nix :'(.
Ondanks dat ik wel "this.CategoryList.SelectedIndexChanged += new System.EventHandler(this.CategoryList_SelectedIndexChanged);" in me "InitializeComponent" heb staan....

  • TeeDee
  • Registratie: Februari 2001
  • Laatst online: 21:45

TeeDee

CQB 241

Autopostback?

Heart..pumps blood.Has nothing to do with emotion! Bored


  • The-MeLLeR
  • Registratie: Juni 2004
  • Laatst online: 27-02 11:20
wat bedoel je met "Autopostback"??

  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 19:07

gorgi_19

Kruimeltjes zijn weer op :9

Dat die property op true moet staan

Digitaal onderwijsmateriaal, leermateriaal voor hbo

Pagina: 1