Avatar billede javanic Nybegynder
13. oktober 2006 - 10:58 Der er 12 kommentarer og
1 løsning

Kalde UserControl#1's metode fra UserControl#2

Problematikken består i at jeg ønsker at opdatere UserControl#1 fra en anden - UserControl#2 ved at kalde en metode på UserControl#1. Denne metode skal blot reloade kontrollens data.

Jeg har prøvet at benytte mig af følgende:
-------------
...
// refresh control:
MyControl1 c1 = (MyControl1)Page.FindControl("ucMyControl1");
c1.RefreshControl();
--------------


Begge ASCX filer ligger i samme namespace:

namespace Modules.Web
{
  ...
}


- men jeg kan ikke rigtig tilgå dem igennem dette namespace.



NB. Bruger VS 2005


håber der er en der kan hjælpe, da jeg skal bruge det her og nu.
Avatar billede snepnet Nybegynder
13. oktober 2006 - 11:35 #1
Du skal koble dem sammen via din form vha. events... Smid en mailadresse så skal du få et eksempel.
Mvh
Avatar billede javanic Nybegynder
13. oktober 2006 - 14:13 #2
hej snepnet

det ville være helt super,
don_hald@hotmail.com

:-)
Avatar billede snepnet Nybegynder
13. oktober 2006 - 14:22 #3
Det er sendt.
Mvh
Avatar billede javanic Nybegynder
13. oktober 2006 - 14:30 #4
takker ydmygt - kigger på den med det samme
Avatar billede javanic Nybegynder
13. oktober 2006 - 14:52 #5
jamen det lader jo til at funge'. Men snepnet, kan du svare mig på hvorfor jeg ikke kan tilgå UserControl#1 inde fra UserControl#2's codebehind - til trods for at de indgår i samme namespace.

Siden med de 2 UserControls - ASPX-delen)
-----------------------------

<UC:UserControl1 ID="ucControl1" runat="server" />

noget tekst...

<UC:UserControl2 ID="ucControl2" runat="server" />








-----------------------------
UserControl#1)
namespace Modules.Web
{
  public partial class UserControl1 : System.Web.UI.UserControl
  {
      protected void Page_Load(object sender, EventArgs e)
      {
        ...
      }

    public void UpdateUI()
    {
        // re-databind
    }

  }

}

-----------------------------





UserControl#2)
-----------------------------
namespace Modules.Web
{

  public partial class UserControl2 : System.Web.UI.UserControl
  {

      protected void Page_Load(object sender, EventArgs e)
      {
        // bør jeg så ikke kunne tilgå den i form af:
        UserControl1 ctrl = (UserControl1 )Page.FindControl("ucControl1");
        ctrl.UpdateUI();
       
      }
  }
}
-----------------------------




Det bør jo virke men det gør det ikke - kan slet ikke tilgå "UserControl1" klassen fra UserControl2 - er det namespacet der er problemet eller ??
Avatar billede snepnet Nybegynder
13. oktober 2006 - 15:08 #6
Du kan godt tilgå den, hvis du laver et register directive i aspx'en - f.eks:
<%@ Register Src="UC1.ascx" TagName="UC1" TagPrefix="uc1" %>
Så kan du tilgå den som du har skrevet, men det er sjældent anbefalelsesværdigt.
Mvh
Avatar billede javanic Nybegynder
13. oktober 2006 - 15:17 #7
Det havde jeg allerede lavet - for at tilføje dem på min aspx-side. Men det gør jo ikke at jeg rent faktisk også kan tilgå dem længere nede i hierarkiet på mine andre usercontrols.

Rent faktisk virker ovenstående kode (men vs intellisense fanger den bare ikke), hvilket jeg dog helst ville have fikset.

Alternativt kunne jeg jo vælge at typecaste til min webform klasse (aspx'en) og så kalde kontrollen via en public accessor:

  Webform1 page = (Webform1)Page;
  page.UCControl1.UpdateUI();
Avatar billede javanic Nybegynder
13. oktober 2006 - 15:18 #8
>> Så kan du tilgå den som du har skrevet, men det er sjældent anbefalelsesværdigt.

af performance mæssige grunde eller ?
Avatar billede javanic Nybegynder
13. oktober 2006 - 15:19 #9
uanset hvad må du godt smide et svar, du kære snepnet ;-)
Avatar billede snepnet Nybegynder
13. oktober 2006 - 15:53 #10
Du kan sætte et register directive ind på selve den usercontrol hvor du vil programmere op imod en anden.
F.eks. sætte et uc1 directive ind i din uc2.ascx fil.
Og nej - det har ikke noget med performance at gøre, men hvis en usercontrol skal kunne fungere som en selvstændig enhed, er det ikke hensigtsmæssigt at den er afhængig af en anden usercontrol den skal slå op via siden.
Den slags bør laves på en anden måde.
Afhængigheder mellem kontroller kan du sagtens lave - det er bare hensigtsmæssigt at abstrahere afhængigheden i f.eks. et interface ell.
Mvh
Avatar billede snepnet Nybegynder
13. oktober 2006 - 15:53 #11
(eller skabe afhængigheden via formen - som i eksemplet)
Avatar billede javanic Nybegynder
13. oktober 2006 - 17:31 #12
jeg er helt med. Tak for input snepnet.
Avatar billede snepnet Nybegynder
14. oktober 2006 - 13:17 #13
Var så lidt :o)
Mvh
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