2010-05-29 6 views
0

В моей .aspx странице у меня DataList:Как найти одну метку в DataList, который установлен Истина

<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> 

И в моем коде за помощью события ItemCreated, чтобы найти и установить label.backcolor имущество. (Примечание: Я использую рекурсивную FindControl класс)

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; 
      } 
    } 

Когда я запускаю страницу, то itemLabel найден, и цвет показывает. Но он устанавливает цвет itemLabel в первый экземпляр itemLabel, найденный в DataList. Из всех itemLabels в DataList только один будет иметь текст = True - и это должен быть ярлык, собирающий обратную цветную букву. Также: ItemLabel собирает столбец в БД под названием «CollectionHomePage», который является типом данных True/False bit. Мне нужно пропустить что-то простое ... Спасибо за ваши идеи.

ответ

1

ItemCreated событие выполнено для каждого элемента списка данных, оно не является глобальным, поэтому вы выполняете тот же код для элемента EACH, и я боюсь, что это неверно в вашем случае.

Вам необходимо проверить только текущий элемент, который был создан. Кроме того, поскольку по пункту создал данные еще не привязаны к объекту, который нужно использовать ItemDataBound событие

Здесь у вас есть фрагмент кода, который может работать для вас

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

Эй Claudio, это все еще не работает правильно , Когда я попробовал ваше предложение, страница загрузилась без ошибок, но ярлык с текстом, установленным в True, не отображал обратную цветную. Спасибо. – Doug

+0

@Doug. Попробуйте выполнить этот же код при событии OnItemDataBound –

+0

ДА! Теперь он работает. Должен был использовать OnItemDataBound в первую очередь. Спасибо Клаудио. – Doug

 Смежные вопросы

  • Нет связанных вопросов^_^