Avatar billede brian-johansen Nybegynder
16. juli 2006 - 00:47 Der er 15 kommentarer og
1 løsning

Find knap i Gridview

Hey..
Jeg har et Gridview hvor jeg her en knap som ligger i et TemplateField lige som vist nedenfor.

<asp:TemplateField>
                <ItemTemplate>
                    <asp:ImageButton ID="ImageButton2" runat="server" Enabled="false" OnClick="Slet_Punkt" ImageUrl="~/images/delete.png" />
  </ItemTemplate>

Problemet er bare at jeg gerne vil kunne få fat i den fra min code-behind fil.

Jeg har prøvet med FindControl, men det er ikke rigtig lykkes for mig.

Er der nogen der har nogen gode ideer ?

mvh Brian
Avatar billede Slettet bruger
16. juli 2006 - 07:25 #1
Kommmer noget anpå hvilken kontekst du har når du forsøger på det, men hvis du eksemplevis får en event så som Editing og den er startet i en ItemTemplate hvori din knap sidder så kan du bruger parameteren sender i event metoden på følgende måde:

Control senderControl = sender as Control;
ImageButton button = senderControl.parent.FindControl("ImageButton2") as ImageButton;

Humlen er at FindControl fungerer i det NamingContext den bliver kaldt i og din knap vil noget oversimplificeret side i et NamingContext som sådan:

Page::GridView:TemplateField.

Du skal altså sørger for at når du laver en FindControl så gør du det i det NamingContext som din Control kan forventes at være i.
Avatar billede brian-johansen Nybegynder
16. juli 2006 - 14:07 #2
Jep nu kan jeg godt finde den, men jeg kan ikke bruge den fordi den ikke er sat til instans af et andet object ?
Hvordan løser jeg det, for jeg kan jo ikke bare skrive new ImageButton ?

Mvh brian
Avatar billede snepnet Nybegynder
17. juli 2006 - 09:42 #3
Hvis den er null - har du ikke fundet den.
Prøv at vis den kode du bruger.
Mvh
Avatar billede brian-johansen Nybegynder
17. juli 2006 - 10:05 #4
Jeg bruger denne kode :

  protected void GridView2_SelectedIndexChanged(object sender, EventArgs e)
    {
        Control senderControl = sender as Control;
        ImageButton button = senderControl.Parent.FindControl("ImageButton2") as ImageButton;
      Button.enabled = true;
       
    }

Grunden til at jeg har det sådan er at man skal markere den række man skal bruge før man kan bruge den funktionsknap der hedder imagebutton1. Ellers for man en fejl og for så at minimere antal fejl har jeg gjort sådan at knappen først bliver enabled når man trykker på en række...

mvh BRian
Avatar billede snepnet Nybegynder
17. juli 2006 - 10:21 #5
Den kode du har sendt kan vel ikke kompilere... Kan du ikke sende den du reelt benytter, og skrive hvad der fejler med den?
Mvh
Avatar billede Slettet bruger
17. juli 2006 - 10:54 #6
Nu er Button (med stort) ikke en kontrol du har på siden vel ?

button != Button
Avatar billede brian-johansen Nybegynder
17. juli 2006 - 11:07 #7
Hej
det skulle være button med lille ligesom kryptos skriver i det første indlæg.

Koden kan fint komplilere, jeg får bare en fejl så snart jeg trykker på min select knap i gridview'et. Som siger at Object is not set to an instance of a object.

Mvh Brian
Avatar billede brian-johansen Nybegynder
17. juli 2006 - 11:08 #8
Button er navnet på knappen lige så vi er enig :D

mvh BRian
Avatar billede snepnet Nybegynder
17. juli 2006 - 11:57 #9
Fint nok - bare Button.enabled er button.Enabled ;o)

Hov ... Denne her kode du har går ikke.
Control senderControl = sender as Control;
ImageButton button = senderControl.Parent.FindControl("ImageButton2") as ImageButton;

Gør sådan her istedet:
GridViewRow row = GridView1.Rows[GridView1.SelectedIndex];
ImageButton imgBtn= row.FindControl("ImageButton2") as ImageButton;

Mvh
Avatar billede snepnet Nybegynder
17. juli 2006 - 11:58 #10
(sender er selve GridView'et)
Avatar billede snepnet Nybegynder
17. juli 2006 - 11:59 #11
Og så ved jeg jo ikke om du har kaldt dit GridView for GridView1 (det gør designeren bare som default), men hvis du har givet det et andet navn skal du self. skrive det istedet :o)
Mvh
Avatar billede brian-johansen Nybegynder
17. juli 2006 - 12:08 #12
Jamen det er jo helt genialt :D

Det virker mange tak for hjælpen begge to.

Ligger i lige et svar

Mvh Brian
Avatar billede brian-johansen Nybegynder
17. juli 2006 - 12:11 #13
Hvad var egentlig forskellen på de to løsninger og hvornår skal man bruge hvad ?

mvh Brian
Avatar billede snepnet Nybegynder
17. juli 2006 - 12:19 #14
Well... formålet med begge løsninger er at få fat i den kontrol der er namingcontainer for den knap du vil have fat i.
Namingcontaineren er i forbindelse med knapper i gridview et GridViewRow, og du kan så tage fat i den valget række, og benytte dens FindControl(...) til at få fat i din knap.
Havde senderen f.eks. været en anden knap du selv havde sat ind - ville du kunne bruge kryptos løsning (eller noget tilsvarende).
Mvh
Avatar billede snepnet Nybegynder
17. juli 2006 - 12:19 #15
Og et svar :o)
Mvh
Avatar billede brian-johansen Nybegynder
17. juli 2006 - 15:18 #16
OK på den måde... takker

Jeg venter lige på at kryptos ligger et svar også :D

mvh Brian
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