2008-11-17 5 views
1

Je remplace une grille, en ajoutant certaines fonctionnalités client. Une des fonctionnalités est une liste déroulante pour ajuster la taille de la page. J'étends la grille en utilisant un contrôle de serveur client, ce qui fonctionne très bien pour ce que j'ai fait jusqu'ici. Maintenant, cependant, j'ai un peu de mal à obtenir le contrôle dynamiquement ajouté pour faire une publication. Le javascript pour lancer la publication n'est pas présent.Contrôle ajouté dynamiquement ne pas faire de publication

Protected Overrides Sub OnPreRender(ByVal e As System.EventArgs) 
    Dim pageSizePanel As New Panel 
    ... 
    Dim countList As List(Of String) = GetCountList() 
    Dim pageSizeDropdown As New DropDownList() 
    pageSizeDropdown.ID = "pageSizeDropdown" 
    pageSizeDropdown.DataSource = countList 
    pageSizeDropdown.DataBind() 

    AddHandler pageSizeDropdown.SelectedIndexChanged, _ 
       AddressOf HandlePageSizeChange 

    pageSizePanel.Controls.Add(pageSizeDropdown) 
    ... 
    MyBase.Controls.AddAt(0, pageSizePanel) 
    MyBase.OnPreRender(e) 
End Sub 

Le code HTML est

<select name="tab$grid1Tab$RadGrid1$pageSizeDropdown" 
    id="tab_grid1Tab_RadGrid1_pageSizeDropdown"> 
     <option selected="selected" value="10">10</option> 
     <option value="20">20</option> 
     <option value="40">40</option> 
     <option value="80">80</option> 
     <option value="All">All</option> 

    </select> 

Alors, est-ce que cela a à voir avec quand je suis 'injection' les contrôles? Cela concerne-t-il l'ajout dynamique des contrôles?

Répondre

2

La première chose que je remarqué que vous a été serait manquer ceci:

pageSizeDropdown.AutoPostBack = true 

mais je ne suis pas sûr que ce soit tout ce que vous avez besoin pour que cela fonctionne

+0

Vous avez raison à propos de ce n'est pas tout. Il y a des trucs ViewState détraqués. –

+0

La 2ème partie du problème peut être due à une fois que la publication rencontre le serveur, elle ne sait pas nécessairement quoi faire si ce contrôle n'existe pas lors de la reconstruction de la page (c.-à-d. t été couru encore). j'essaierais de construire la grille dans l'événement page init – John

1

Vous devez définir "AutoPostBack" sur true pour une liste déroulante à la publication. Dans le cas contraire, un autre contrôle devra renvoyer le formulaire (cependant, l'événement SelectedIndexChanged se déclenchera quand cela arrivera).

1

Je pense que le pageSizeDropdown de contrôle aurait besoin à créer et l'événement connecté plus tôt dans le cycle de vie de la page, voir http://msdn.microsoft.com/en-us/library/ms178472.aspx. Le contrôle ajouté dynamiquement doit être créé avant l'événement LoadComplete de pages afin que son événement de contrôle puisse se déclencher.