Avatar billede forceprogrammer Nybegynder
23. februar 2005 - 15:52 Der er 14 kommentarer og
1 løsning

Vis kun Repeater-HeaderTemplate hvis der findes rækker

Jeg har en repeater der viser en træstruktur.
Mit problem er at hvis denne repeater er tom skal den ikke vise HeaderTemplate.

Så altså hvordan får jeg repeateren til kun at skrive headertemplate ud hvis der findes rækker?
Avatar billede burningice Nybegynder
23. februar 2005 - 16:03 #1
det nemmeste er vel at skjule din repeater helt hvis der ikke er nogen poster.

if (dinDataSource.Count > 0) {
  dinRepeater.DataSource = dinDataSource;
  dinRepater.DataBind();
} else {
  dinRepeater.Visible = false;
}
Avatar billede forceprogrammer Nybegynder
23. februar 2005 - 16:06 #2
Det kan jeg desværre ikke bruge da det er en nested repeater jeg har med 3 niveauer.
Derfor vil der altid i det øverste niveau være data, men det er ikke sikkert der er noget i underniveauerne.
Altså skal jeg kunne checke på antallet af childrows således at hvis det er 0 kan jeg skjule min header, eller bare slet ikke udskrive den.
Kan det lade sig gøre? Det burde det kunne.
Avatar billede forceprogrammer Nybegynder
23. februar 2005 - 16:16 #3
Er det virkelig slet ikke muligt?
Avatar billede burningice Nybegynder
23. februar 2005 - 16:23 #4
hvordan binder du data til dine nested repeaters?
Avatar billede forceprogrammer Nybegynder
23. februar 2005 - 16:29 #5
Således:
///////////////////////////////ASPX fil////////////////////////////
<asp:repeater id="grandchildRepeater" enableviewstate=false
                            datasource='<%# GetChildRelation(Container.DataItem,"automat_bestillingslinier_relation") %>' runat="server">

///////////////////////////////ASPX.CS fil////////////////////////////
protected DataView GetChildRelation(object dataItem,
            string relation)
        {
            DataRowView drv = dataItem as DataRowView;
            if (drv != null)
            {
                return drv.CreateChildView(relation);
            }
            else
            {
                return null;
            }
        }
Avatar billede burningice Nybegynder
23. februar 2005 - 16:35 #6
så burde du kunne lave noget lign. det her

///////////////////////////////ASPX fil////////////////////////////
<asp:repeater id="grandchildRepeater" enableviewstate=false
                            datasource='<%# GetChildRelation(Container.DataItem,"automat_bestillingslinier_relation") %>' visible='<%# ContainsAnyData(Container.DataItem) %>' runat="server">

///////////////////////////////ASPX.CS fil////////////////////////////
protected DataView GetChildRelation(object dataItem,
            string relation)
        {
            DataRowView drv = dataItem as DataRowView;
            if (drv != null)
            {
                return drv.CreateChildView(relation);
            }
            else
            {
                return null;
            }
        }

protected bool ContainsAnyData(object dataItem)
        {
            DataRowView drv = dataItem as DataRowView;
            if (drv != null)
            {
                return true;
            }
            else
            {
                return false;
            }
        }
Avatar billede forceprogrammer Nybegynder
23. februar 2005 - 16:43 #7
Den viser dem stadig....Så no effect
Men er det ikke muligt at lave en eller anden form for if-statement i preprocesseringen, således at man kan sige i aspx koden noget i retning af

<%# if(containsdata(Container.DataItem)%>
HTML
<%# endif>
Avatar billede forceprogrammer Nybegynder
23. februar 2005 - 17:04 #8
Kan det lade sig gøre?
Avatar billede forceprogrammer Nybegynder
23. februar 2005 - 17:05 #9
Det er da mærkeligt der ikke er indbygget en feature til det problem. Som jeg ser det må det være et ret generelt problem
Avatar billede burningice Nybegynder
23. februar 2005 - 17:18 #10
asp.net er ikke så glad for den slags codeblocks så det kan jeg ikke umiddelbart svare dig på.

Jo, jeg kan da forestille mig det er et hyppigt forekommende problem, da header og footer-template jo bliver vist lige meget hvad, det er kun ItemTemplate der ikke bliver renderet hvis ens datasource ikke indeholder noget data. Dog har jeg altid løst problemet ved at skjule repeateren fuldstændig, og det har aldrig bøvlet.
Avatar billede forceprogrammer Nybegynder
23. februar 2005 - 17:22 #11
Nej kan jeg godt se.

Men det kan jo så ikke løse det her problem...Du ville nok have samme problem hvis du rodede med nestede repeaters også :)

Men anyways, jeg har løst problemet nu.
Løsningen var åbenløs efter jeg først havde snublet over den. Ret dumt.

Det er jo selvfølgelig drv.CreateChildView(relation).count jeg skal checke om er større end 0.
:)
Så jeg har løst problemet. Men mange tak for hjælpen. Smid et svar så skal du få pointene for den fine indsats
Avatar billede burningice Nybegynder
23. februar 2005 - 18:35 #12
:) okay, så ContainsAnyData returnerede true selvom der ikke var nogle poster i dataviewet?
Avatar billede forceprogrammer Nybegynder
23. februar 2005 - 18:36 #13
Ja nemlig hehe :)
Avatar billede burningice Nybegynder
23. februar 2005 - 18:41 #14
der kan man bare se... :) men det var godt at du fik rettet det til så det virkede
Avatar billede forceprogrammer Nybegynder
23. februar 2005 - 18:42 #15
Yepski....Og tak for hjælpen.
Vender nok snart frygteligt tilbage :)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester