Как найти одну метку в DataList, для которой установлено значение True - PullRequest
0 голосов
/ 29 мая 2010

На моей странице .aspx у меня есть 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 Ответ

1 голос
/ 29 мая 2010

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

Вам нужно проверить только текущий элемент, который был создан. Кроме того, поскольку при создании элемента данные еще не привязаны к элементу, необходимо использовать событие 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;
        }
    }
}
...