Jak wyróżnić wiersz tabeli w Repeater?

0

Mam Repeater wyświetlający w każdym wierszu obrazek, tytuł i opis:

        <asp:Repeater ID="Repeater1" runat="server" DataSourceID="SqlDataSource1" 
            onitemdatabound="Repeater1_ItemDataBound">
            <HeaderTemplate>
                <table>
            </HeaderTemplate>
            <ItemTemplate>
                <tr>
                    <td rowspan=4>
                        <asp:Image ID="imgObraz" runat="server" />
                        <asp:HiddenField
                            ID="hdfId" runat="server" Value='<%# Eval("Id") %>' />
                    </td>
                    <td bgcolor="#CCFFCC">
                        <asp:Label runat="server" ID="lblDOd" Text='<%# Eval("DOd") %>' />
                    </td>
                </tr>
                <tr>
                    <td bgcolor="#CCFFCC">
                        <asp:Label runat="server" ID="Label3" Text='<%# Eval("Tytul") %>' />
                    </td>
                </tr>
                <tr>
                    <td bgcolor="#CCFFCC">
                        <asp:Label runat="server" ID="Label1" Text='<%# Eval("Opis") %>' />
                    </td>
                </tr>
                <tr>
                    <td bgcolor="#CCFFCC">
                        <asp:HyperLink ID="HyperLink1" runat="server">...więcej...</asp:HyperLink>
                    </td>
                </tr>
            </ItemTemplate>
            <FooterTemplate>
                </table>
            </FooterTemplate>
        </asp:Repeater>

Przyisaniem wartości z bazy zajmuje się zdarzenie:

        protected void Repeater1_ItemDataBound(object sender, RepeaterItemEventArgs e)
        {
            Image img1 = e.Item.FindControl("imgObraz") as Image;
            Label lbl1 = e.Item.FindControl("lblDOd") as Label;
            HiddenField hdf1 = e.Item.FindControl("hdfId") as HiddenField;

            if (img1 != null)     //  WAŻNE sprawdzenie, bo bez tego błąd !!!
            {
                if (hdf1 != null)     //  WAŻNE sprawdzenie, bo bez tego błąd !!!
                {
                    if (File.Exists(appPath + "/ObrazyArty/arty" + hdf1.Value + ".jpg"))
                    {
                        img1.ImageUrl = "/ObrazyArty/arty" + hdf1.Value + ".jpg";
                    }
                    else
                    {
                        img1.ImageUrl = "/ObrazyArty/arty0.jpg";
                    }
                }
            }
        }

A teraz chciałbym w ItemDataBound zmienić kolor tła tych wierszy, gdzie nie istnieje obrazek na czerwony.
Czy muszę w każdej komórce umieszczać panel? To będzie ich aż 6.
Niestety nie da się zamiast

asp:table.</p>

Efekt końcowy ma być jak np ogłoszenia wyróżnione.

Z góry dziękuje za pomoc.

1

Zrób to w css - jeśli nie ma tego obrazka to nadaj tr jakąś klasę (klasę w sensie css, czyli <tr class="missing-image">) i ostyluj ją w znaczniku <style> albo zewnętrznym pliku css, np. .missing-image { background-color:#f00; }.

0

Ale czy można zrobić to ostylowanie w Repeater1_ItemDataBound ?
Dla np Label ok:

Label lbl1 = e.Item.FindControl("lblDOd") as Label;
lbl1.Text="Ala ma kota" 

A dla ?

1

Jaka kontrolka kryje się pod e.Item?

0

... HtmlTableRow

Dzięki o boski ŁF za wskazówki.

Zrobiłem:

<tr id="aaa" class="aaa"  runat="server">

i

tr1.Attributes.Add("class", "bbb");

i działa
:-)

0

Sugeruję, żebyś używał nazw, które coś mówią. W przeciwnym wypadku jeśli za kilka miesięcy wrócisz do tego projektu będziesz musiał odkrywać wszystko na nowo.

1 użytkowników online, w tym zalogowanych: 0, gości: 1