2009-11-02 5 views
2

J'ai un projet dans lequel j'ai créé deux contrôles utilisateur: une légende et un élément de légende.Utilisation de UserControls par programme

Sur ma page Web, je récupère une collection d'informations que je veux charger dans les contrôles de LegendItem (définition du texte de base et des informations de couleur) puis ajouter ces éléments à ma légende (le contrôle Legend a un panneau dessus et je l'ai fait référence à une usercontrol Légende sur la page Web lui-même.

Je ne parviens pas à trouver comment bien obtenir une poignée sur un contrôle LegendItem pour que je puisse accéder à ses propriétés et les définir.

Je peux fournir code si vous en avez besoin pour aider - mais je suis coincé et besoin d'aide! Merci d'avoir pris le temps de lire ceci!

Répondre

0

Je ne suis pas sûr de ce que vous essayez de faire. Si tout ce que vous avez besoin est d'ajouter votre contrôle (statique) à votre page voici comment vous le faites:

<% @ Page Language = "C#" %>
<% @ Register TagPrefix = "uc" tagName = "Spinner" = "~ Src \ Controls \ Spinner.ascx" %>
< html>
< body>
< forme runat = "server">
      < uc: Spinner id = » Spinner1 " runat = "server" MinValue = "1" MaxValue = "10" />
</form>
</body>

Une fois que vous avez, dans le code derrière vous pouvez localiser le contrôle par ID, le cast à votre type, et puis faire n'importe quoi. BTW, MinValue et MaxValue sont des propriétés définies sur votre implémentation de contrôle. Maintenant, si vous voulez créer dynamiquement une instance de contrôle à la volée, vous devez utiliser la méthode LoadControl de votre page. Cette méthode renvoie une instance de votre contrôle, mais pour faire quoi que ce soit, vous devez l'ajouter à la collection de contrôle de la page, comme ceci:

page.Controls.Add(mycontrol).

Vous pouvez le faire n'importe où dans le cycle de vie de la page avant l'événement OnRender.Gardez à l'esprit qu'une fois que vous faites cela, le contrôle commencera à rattraper son retard - il sera poussé à travers tous les événements du cycle de vie de la page qu'il a raté. Gardez également à l'esprit que si la page est publiée, vous devez vous assurer que le contrôle est en place exactement comme il l'était au moment où le viewstate est traité.

En guise de remarque, je pense que faire ce genre de travail côté serveur est un peu dépassé. Vous feriez mieux de faire quelque chose avec JQuery et les goûts

1

La clé pour comprendre les contrôles dynamiques est de comprendre le cycle de vie de la page. Vous devez vous assurer que vos contrôles sont créés pendant l'événement page_init pour s'assurer que le contrôle est géré correctement côté serveur.

Un grand contrôle qui est disponible pour vous aider à gérer dynamiquement des contrôles créés est le dynamic controls placeholder

+0

Je pense que je dois clarifier. Je comprends le cycle de vie de la page - cette question n'est pas à ce sujet. Je veux être en mesure de créer un LegendItem en code, tout comme je peux créer un TextBox, DropDownList, etc, définir ses propriétés, et l'ajouter à un contrôle utilisateur Legend. Je peux le faire en créant ma propre bibliothèque de classes et en créant un contrôle personnalisé puis en faisant référence à cette DLL, mais je ne veux pas passer en revue tout cela pour cela si possible. Merci pour votre réponse, lomaxx. – TheGeekYouNeed

1

Vous pouvez simplement par exemple le contrôle de l'utilisateur à l'aide LoadControl.

Définissez ensuite vos propriétés. Puis ajoutez votre contrôle à un contrôle d'espace réservé asp.net que vous avez sur votre contrôle Legend.


LegendItem li = (LegendItem)LoadControl("LegendItem.aspx"); 
li.name = "bob" 
legend.placeholder.controls.add(li); 
+0

Cela ne fonctionne pas pour moi - je l'ai essayé. Mon application Web ne reconnaît pas LegendItem en tant qu'objet. Obtention du message d'erreur "type ou nom de l'espace de nom" LegendItem "ne pas être trouvé" J'ai la référence au contrôle dans ma page Web – TheGeekYouNeed

+0

@Cen - Sans afficher votre projet et votre code , Je ne peux vraiment pas donner beaucoup plus de conseils, vous dites que vous avez une référence au contrôle dans votre page web, que voulez-vous dire par là? Si tout est dans un projet, vous ne devriez pas avoir besoin d'une référence –

+1

le type «object» renvoyé par LoadControl à type «LegendItem»? –

0

Ceci est tellement bizarre. Ma page aspx.cs ne reconnaîtrait mon contrôle que si je donnais à l'utilisateur le contrôle d'un espace de noms. Maintenant, je suis capable de créer des objets, de lancer correctement, et ainsi de suite.

Merci à tous pour vos efforts.

Questions connexes