2010-06-24 3 views
1

J'ai un panneau dans Itewmtemplate de la liste, il est seulement supposé montrer lorsque l'utilisateur est connecté, par défaut, la visibilité = false . L'aide est appréciée.Panel avec dans Listview me donne une erreur (Référence d'objet non définie à une instance d'un objet.)

ici est mon code C#:

Panel pnlOptions = (Panel)ListView1.FindControl("pnlOptions"); 
    pnlOptions.Visible = true; 

code Aspx:

<asp:Panel ID="pnlOptions" runat="server" Visible="false"> 
    <ul> 
     <ul> 
     <li style="float: left">Option 1:</li> 
     <li style="float: left">dropdown here</li> 
     </ul> 
    <li style="float: left">Option 1:</li> 
    <li style="float: left">dropdwon here</li> 
    </ul> 

    </asp:Panel> 

Répondre

1

Vous obtenez l'erreur car l'appel FindControl est soit:

  1. défaut - Si l'élément n'est pas trouvé en tant qu'enfant du contrôle, FindControl renvoie null. La recherche du «mauvais» objet et la conversion en (Panel) échouent.

je recommande de réécrire le code comme:

Control control = ListView1.FindControl("pnlOptions"); 
Panel pnlOptions = control as Panel; 
pnlOptions.Visible = true; 

Vous pouvez ensuite définir des points d'arrêt, et la figure sur laquelle des lignes échoue sur vous.

+0

Oui, il est le panneau qui jette l'erreur. – Developer

+0

@ fzshah76: Vérifiez le type (dans le débogueur) du Panel - si vous réécrivez comme ci-dessus, vous devriez être capable de comprendre exactement pourquoi vous rencontrez le problème, ou le corriger, ou nous donner plus d'informations pour aider toi. –

+0

Non, je pense que c'est quelque chose comme type de grille de vue ici est une autre question similaire http://forums.asp.net/t/1163895.aspx – Developer

0

Mon problème est que je tente de mal par acces il une fonction que j'ai créé quand je devais utiliser le Item_Created événement est le code de travail final ici:

protected void ListView1_ItemCreated(object sender, ListViewItemEventArgs e) 
{ 
    Control control = e.Item.FindControl("pnlOptions"); 
    Panel pnlOptions = control as Panel; 
    pnlOptions.Visible = true; 
} 

Merci Reed.

0

Cela devrait fonctionner aussi:

foreach (var item in ListView1.Items) 
    { 
    Panel pnlOptions = (Panel)item.FindControl("pnlOptions"); 
    pnlOptions.Visible = true; 
    } 
Questions connexes