0 votes

Table remplie de contrôles à l'intérieur d'un ASP.NET FormView, obtenir des contrôles?

Quel est le truc pour obtenir les contrôles à l'intérieur de FormView. Je les obtenais avec FindControl() mais maintenant je ne peux plus y accéder. Exemple : j'ai quelques ImageButton dans FooterTemplate, je peux les obtenir facilement, mais quand il s'agit des contrôles à l'intérieur de FormView !!! chaque contrôle est null. Pensez-vous que je devrais les nommer différemment dans chaque modèle ? Cela me fait penser à la table causant ce bruit !

J'utilise l'événement DataBound et je vérifie le Mode spécifique ! Des idées ? Merci.

[MIS À JOUR]

Cela fonctionne

if (this.kataSistimataFormView.CurrentMode == FormViewMode.Edit)
{
    ImageButton update = (ImageButton)this.kataSistimataFormView.FindControl("btnUpdate");
    update.Visible = true;

Mais pour une raison quelconque, cela ne fonctionne pas

CheckBox chkBoxPaidoi = kataSistimataFormView.FindControl("chkBoxPaidoi") as CheckBox;

0voto

mlennox Points 74

FindControl n'est pas récursif. Ce que je veux dire, c'est qu'il ne trouvera que les contrôles qui sont dans les contrôles enfants du contrôle que vous recherchez - il ne cherchera pas dans les contrôles enfants des contrôles enfants

Si vous avez placé le contrôle que vous recherchiez précédemment dans un autre contrôle, vous devrez soit chercher dans ce nouveau contrôle, soit, si vous voulez toujours utiliser kataSistimataFormView comme contrôle parent, vous devrez utiliser une recherche récursive.

Google pour "findcontrol récursif" il y a quelques bons exemples que vous pouvez probablement simplement copier-coller.

0voto

Taskos George Points 1754

Il semble que cela a été causé par les mêmes identifiants de nom sur divers modèles, Insert, Edit, Item. Même si cela est pris en charge par le compilateur, cela pose problème lorsque vous y accédez de manière programmative par la suite.

Merci à tous.

0voto

TechplexEngineer Points 594

Avez-vous réussi à résoudre ce problème? Si vous connaissez l'ID, vous pouvez utiliser cette fonction récursive :

private Control FindControlRecursive(Control root, string id) 
{ 
    if (root.ID == id)
    { 
        return root; 
    } 

    foreach (Control c in root.Controls) 
    { 
        Control t = FindControlRecursive(c, id); 
        if (t != null) 
        { 
            return t; 
        } 
    } 

    return null; 
} 

Trouvé ici : http://www.codinghorror.com/blog/2005/06/recursive-pagefindcontrol.html

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X