Avatar billede Slettet bruger
30. marts 2009 - 17:30 Der er 8 kommentarer og
1 løsning

Attributes.Add til en imagebutton i en datalist

Dette er en lidt delikat sag som jeg efterhånden ved at blive gråhåret af...!

Jeg har en imagebutton i en datalist og i min codebehind har jeg tilføjet denne en attribut som åbner en popup.

Nu ved jeg allerede at for ikke at skulle klikke 2 gange på en knap med en attribut tilføjet skal den ligge under page_load.

Problemet er bare at jeg ikke ved hvordan man fra "page_load" "dykker" ned i datalisten  og finder en imagebutton, eller hvordan man ellers kan gøre noget smart ved datalisten som forhindre at jeg skal klikke 2 gange men kun 1 gang... ~:]

Koden
protected void dlKategori_ItemCommand(object sender, DataListCommandEventArgs e)
{
((ImageButton)e.Item.FindControl("kategoriButton")).Attributes.Add("OnClick", "java script:bla, bla, bla");
}

Datalisten:
<asp:DataList ID=dlKategori OnItemCommand=dlKategori_ItemCommand  runat="server">
<ItemTemplate>
<asp:Imagebutton ID="kategoriButton" ImageUrl=<%# FormatURL(DataBinder.Eval(Container.DataItem, "navn")) %> BorderColor="#757575" BorderWidth="1" ToolTip=<%# Eval("alttekst") %> runat="server" />
</ItemTemplate>
</asp:DataList>
Avatar billede Syska Mester
31. marts 2009 - 11:15 #1
Hej,

Som jeg læser koden her ... så tilføjer du et eller andet på knappen når du klikker på den ... korrekt ?

Hvad har du i PageLoad ? Samme kode eller ? :-s

Må nok sige at jeg er lidt forvirret over din kode og hvad du reelt vil opnå ...

men hvis du vil følgende:
Så er der en anden event du kan lytte på ... mener den hedder:
ItemCreated .... derefter kan du gøre noget ala det samme som du gør ved ItemCommand ...

// ouT
Avatar billede Slettet bruger
31. marts 2009 - 14:14 #2
Min PageLoad er tom... - og min knap åbner en popup...
Det jeg ønsker i alt beskedenhed er såmænd bare at undgå at skulle klikke 2 gange på knapper for at åbne popup'en... - hvordan gør jeg dét...?
Avatar billede Syska Mester
31. marts 2009 - 14:44 #3
Igen ... læs hvad jeg skriver ... nu tror jeg også at jeg selv er klar over hvor det er 2 gange du skal klikke.

ItemCommand bliver kørt når en Button/ImageButton/HyperLink fyrer dens Click Event af ...

Når du så har klikket første gang bliver dit JS indsat på den knap, så den åbner en popup.

Du skal have tilføjet din JS koden med det samme ... derfor skal du bruge ItemCreated eventen på din ListView som jeg også skrev i første post:
http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.listview.itemcreated.aspx
Avatar billede Slettet bruger
06. april 2009 - 09:35 #4
Godt så...!

- har nu forsøgt som forklaret, men har fået en ny (dum) fejl...

"int SelectedID = int.Parse(lblkategoriID.Text); --> Inputstrengen var ikke i et korrekt format."

    protected void dlKategori_ItemCreated(object sender, DataListItemEventArgs e)
    {
        if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
        {
            ((ImageButton)e.Item.FindControl("kategoriButton")).Attributes.Add("OnClick", "java script:bla,bla,bla");

            Label lblkategoriID = e.Item.FindControl("lblkategoriID") as Label;
            int SelectedID = int.Parse(lblkategoriID.Tex <---
    }
}

<asp:DataList ID=dlKategori OnItemCreated=dlKategori_ItemCreated runat="server" RepeatDirection=Horizontal CellSpacing="6">
                    <ItemTemplate>
                        <asp:Imagebutton ID="kategoriButton" ImageUrl=<%# FormatURL(DataBinder.Eval(Container.DataItem, "navn")) %> BorderColor="#757575" Width="150px" Height="150px" BorderWidth="1" ToolTip=<%# Eval("alttekst") %> runat="server" /><asp:Label ID="lblkategoriID" Visible="false" Text='<%# Eval("id") %>' runat="server" />
                    </ItemTemplate>
                </asp:DataList>
Avatar billede Syska Mester
06. april 2009 - 13:48 #5
hvis du sætter Visiable="false" kommer den ikke med i dit html markup ...

Du skal bruge en HiddenField i stedet for Label ...
Avatar billede Slettet bruger
14. april 2009 - 01:03 #6
Ja - alene fyrer ItemCreated eventHandleren min popup op i første click...

    protected void dlKategori_ItemCreated(object sender, DataListItemEventArgs e)
    {
        if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
        {
            ((ImageButton)e.Item.FindControl("kategoriButton")).Attributes.Add("OnClick", "java script:");
        }       
    }

- men for at kunne vise relevat indhold i dén popup er jeg nød til at hente imagebuttons værdi ud som jeg kunne da jeg anvendte ItemCommand...

        Label lblkategoriID = e.Item.FindControl("lblkategoriID") as Label;
        int SelectedID = int.Parse(lblkategoriID.Text);

denne metode går bare ikke med ItemCreate... og har heller ikke haft nævneværdig success med at anvende et hiddenfield i stedet for en label - så hvordan finder man smartest imagebuttonens værdi nu hvor jeg længere anvender ItemCommand...?
Avatar billede Syska Mester
14. april 2009 - 01:23 #7
Du er galt på den ...

JavaScript er client side

asp.net er server side

Du bliver nød til at generere dit javascript kode første gang du laver din liste med mindre du vil have et round trip til serveren for at lave din onclick event ...

PT er jeg slet ikke klar over hvad du er du vil ... men ...

ItemCreated bliver kørt for hvert eneste Item der bliver oprettet, og her kan/skal du tilføje dit JavaScript hvis du ikke vil fordi serveren igen når han klikker på din ImageButton.

ItemCommand bliver kørt en gang når du klikker på en knap i en List

Håber det kaster lidt lys over dit problem.

// ouT
Avatar billede Slettet bruger
14. april 2009 - 08:16 #8
Jeg er udemærket klar over forskellen på server-side og klient-side script...

Problemets rod er løst i denne tråd så smid et svar og få lad få denne tråd lukket... c",)

Ny tråd med det nye problem er oprettet her: http://www.eksperten.dk/spm/871571
Avatar billede Syska Mester
14. april 2009 - 12:03 #9
svar
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