Avatar billede karl-koder Nybegynder
04. december 2007 - 19:38 Der er 9 kommentarer og
1 løsning

ActiveTabIndex i ajax tab control ?

jeg prøver at loade en usercontrol i en tab men usercontrollen vises ikke i tab'en. Koden jeg forsøger med ser således ud :

protected void tab_Container_ActiveTabChanged(object sender, EventArgs e)
{
    if (tab_Container.ActiveTabIndex == 0)
    {
        //
    }

    if (tab_Container.ActiveTabIndex == 1)
    {
        PlaceHolderSites.Controls.Add(LoadControl("List.ascx"));
    }

    if (tab_Container.ActiveTabIndex == 2)
    {
        //
    }
}

Og min tab control skulle være sat rigtig op :

<cc1:TabContainer ID="tab_Container" OnActiveTabChanged="tab_Container_ActiveTabChanged" runat="server" ActiveTabIndex="0" Width="810px">

Nogen der har rodet med noget ligende ?
Avatar billede neoman Novice
05. december 2007 - 18:56 #1
du kan ikke gøre det sådan : controls som sidder i en anden container skal findes derinde vha. FindControl.

Et eksempelr er her - godt nok i VB men du burde kunne finde ud af det:
http://blogs.msdn.com/sburke/archive/2007/06/13/how-to-make-tab-control-panels-load-on-demand.aspx
Avatar billede karl-koder Nybegynder
05. december 2007 - 21:54 #2
Det ser ganske fint ud men jeg vil jo ikke "bare" loade en control (button, label, panel, ect.) men en web user control (.ascx fil) og det kan jeg ikke uniddelbart med det der skrives i blog indlægget du linker til !?!
Avatar billede neoman Novice
05. december 2007 - 22:19 #3
og det kan du ikke fordi ? Når du har en container af en eller anden art, om du propper en foruddefinerert standard server control eller loader en user control - hvad er forskellen ?

Jeg håber du er klar over, at en AJAX Tab control IKKE af sig selv loader hver tab container asynkront, men switcher mellem dem som allerede EE sendt til klienten. For at få et asynkront load, så skal du bruge en update panel. Det fremgår ikke af det du har skrevet hidtil om det er havd du ønsker, eller om du er OK med full page refresh hver gang.

Pointen med eksemplet var at vise hvordan du refererer til ting som ligger inde i en container, fordi det er årsagen til at din kode ikke gør som du vil, hidtil:)
Avatar billede neoman Novice
05. december 2007 - 22:19 #4
EE=ER
Avatar billede karl-koder Nybegynder
05. december 2007 - 22:38 #5
Ok jeg har forsøgt med følgende :

Den tab panel jeg vil loade min .ascx fil i:
<cc1:TabPanel runat="server" ID="tab_Sites">
    <ContentTemplate>
        <asp:UpdatePanel ID="up1" runat="server">
            <ContentTemplate>
                <asp:Button ID="TabButton1" runat="server"  OnClick="TabButton_Click"  style="display:none;"/><br />
                <uc2:List ID="List1" runat="server" Visible="false" />
            </ContentTemplate>
        </asp:UpdatePanel>
    </ContentTemplate>
</cc1:TabPanel>

Fra min codebehind fil:

protected void TabButton_Click(object sender, EventArgs e)
{
    string containerid = "List" + tab_Container.ActiveTabIndex;
    UserControl control = (UserControl)tab_Container.ActiveTab.FindControl(containerid);
    if (control != null)
    {
        control.Visible = true;
    }
}

Og javascriptet:

function findControl(parent, tagName, serverId)
{
    var items = parent.getElementsByTagName(tagName);
           
    // walk the items looking for the right guy
    for (var i = 0; i < items.length; i++)
    {
        var ctl = items[i];
        if (ctl && ctl.id)
        {
            // check the end of the name.
            var subId = ctl.id.substring(ctl.id.length - serverId.length);
            if (subId == serverId)
            {
                return ctl;                       
            }
        }
    } 
    return null;
}
     
function loadTabPanel(sender, e)
{
    var tabContainer = sender;         
                     
    if (tabContainer)
    {
        var updateControlId = "List" + tabContainer.get_activeTabIndex();
       
        // get the active tab and find our button
        var activeTab = tabContainer.get_activeTab();

        // check to see if we've already loaded
        if (findControl(activeTab.get_element(), "div", "List" + tabContainer.get_activeTabIndex())) return;

        var updateControl =  findControl(activeTab.get_element(), "input", updateControlId);
               
        if (updateControl)
        {
            // fire the update
            updateControl.click();
        }
    }
}

Dette var hurtigt sat så det er muligt at jeg misser noget, men jeg får stadigt ikke vist noget i min tab ?
Avatar billede neoman Novice
05. december 2007 - 22:44 #6
Jeg kan ikke overskue din kode lige nu, fordi mit hoved sidder fast i en rapport som skal ud, men mit forslag til dig er at gøre det et lille skridt ad gangen og få hvert skridt til at virke. Kan ikke byde på bedre lige nu :( - hvis du stadig sidder fast så kan jeg først teste dine tanker i morgen aften:).
Avatar billede karl-koder Nybegynder
05. december 2007 - 22:53 #7
det er ok jeg roder lidt videre med det og ser om ikke jeg kan få det til at spille ;o)
Avatar billede karl-koder Nybegynder
06. december 2007 - 17:15 #8
Det er nok mig der er for dum ;o) For jeg kan ikke få det til at spille, så hvis du har mulighed for hjælpe mig ved lejlighed ville det være super.

For at forklare hvad et er jeg gerne vil frem til så kommer her et kort resumé.

1. Jeg opretter en default.aspx fil som indeholder en TabControl.

2. Jeg oprette en web user control f.eks. List.ascx som indeholder en et gridview.

3. Jeg vil nu gerne kunne loade min List.ascx fil i en given TabPanel så den kan vises til brugerne.

Jeg har forsøgt mig lidt frem og tilbage med eksemplet fra ovenstående, men uden held.
Avatar billede karl-koder Nybegynder
06. december 2007 - 20:19 #9
Så tror jeg det lykkedes alligevel.

Hvis jeg ligger en updatepanel i hver tabpanel i min tabcontainer kan jeg i click eventen på button lave følgende :

Control ctrl = LoadControl("List.ascx");
UpdatePanel1.ContentTemplateContainer.Controls.Add(ctrl);

Med det får jeg loadet den control jeg vil uden at den loades ved page_load. Men du skal have tak for hjælpen ;o)
Avatar billede karl-koder Nybegynder
17. december 2007 - 11:15 #10
lukker
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