2010-05-29 12 views
0

Dans ma page .aspx J'ai mon DataList:Comment trouver une étiquette dans DataList qui est définie sur True

<asp:DataList ID="DataList1" runat="server" DataKeyField="ProductSID" 
    DataSourceID="SqlDataSource1" onitemcreated="DataList1_ItemCreated" 
    RepeatColumns="3" RepeatDirection="Horizontal" Width="1112px"> 
    <ItemTemplate> 
     ProductSID: 
     <asp:Label ID="ProductSIDLabel" runat="server" Text='<%# Eval("ProductSID") %>' /> 
     <br /> 
     ProductSKU: 
     <asp:Label ID="ProductSKULabel" runat="server" Text='<%# Eval("ProductSKU") %>' /> 
     <br /> 
     ProductImage1: 
     <asp:Label ID="ProductImage1Label" runat="server" Text='<%# Eval("ProductImage1") %>' /> 
     <br /> 
     ShowLive: 
     <asp:Label ID="ShowLiveLabel" runat="server" Text='<%# Eval("ShowLive") %>' /> 
     <br /> 
     CollectionTypeID: 
     <asp:Label ID="CollectionTypeIDLabel" runat="server" Text='<%# Eval("CollectionTypeID") %>' /> 
     <br /> 
     CollectionHomePage: 
     <asp:Label ID="CollectionHomePageLabel" runat="server" Text='<%# Eval("CollectionHomePage") %>' /> 
     <br /> 
     <br /> 
    </ItemTemplate> 
</asp:DataList> 

Et dans mon code derrière l'utilisation de l'événement ItemCreated pour trouver et régler la label.backcolor propriété. (Note: J'utilise une classe FindControl récursive)

protected void DataList1_ItemCreated(object sender, DataListItemEventArgs e) 
    { 

     foreach (DataListItem item in DataList1.Items) 
     { 
      if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem) 
      { 
      Label itemLabel = form1.FindControlR("CollectionHomePageLabel") as Label; 
      if (itemLabel !=null || itemLabel.Text == "True") 
      { 
       itemLabel.BackColor = System.Drawing.Color.Yellow; 
      } 
    } 

Quand je lance la page, le itemLabel se trouve, et les spectacles de couleur. Mais il définit la couleur itemLabel sur la première instance de itemLabel trouvée dans la DataList. De tous les itemLabels dans la DataList, un seul aura son texte = True - et cela devrait être l'étiquette reprenant la backcolor. De plus: itemLabel récupère une colonne dans le DB appelé "CollectionHomePage" qui est un type de données vrai/faux. Je dois manquer quelque chose de simple ... Merci pour vos idées.

Répondre

1

ItemCreated l'événement est exécuté pour chaque élément de la liste de données, il n'est pas global, donc vous exécutez le même code pour CHAQUE article et j'ai peur que ce soit faux dans votre cas.

Vous devez cocher uniquement l'élément actuel qui a été créé. En outre, étant donné que sur le point créé les données ne sont pas encore lié à l'élément que vous devez utiliser l'événement ItemDataBound

Ici vous avez un extrait qui peut travailler pour vous

protected void DataList1_ItemDataBound(object sender, DataListItemEventArgs e) 
{ 
    foreach(Control control in e.Item.Controls) 
    { 
     if (control is Label && (control as Label).Text.Equals("True")) 
     { 
      (control as Label).BackColor = System.Drawing.Color.Yellow; 
     } 
    } 
} 
+0

Hey Claudio, il ne fonctionne toujours pas correctement . Lorsque j'ai essayé votre suggestion, la page chargée sans erreur, mais l'étiquette qui a le texte défini sur True n'affichait pas la couleur de fond. Je vous remercie. – Doug

+0

@Doug. S'il vous plaît essayez d'exécuter ce même code sur l'événement OnItemDataBound –

+0

OUI! Maintenant ça marche. Aurait dû utiliser OnItemDataBound en premier lieu. Merci Claudio. – Doug