Wie der Titel schon sagt, habe ich ein Etikett im Repeater und möchte seine Farbe entsprechend seinem Textwert ändern. Kann ich das auf irgendeine Weise ohne Chaos tun?

<asp:Label ID="lblVerified" runat="server" Text='<%# Eval("post_verified")%>' OnLoad="lblVerified_Load"

Was ich tun möchte, ist, wenn Eval ("post_verified"). Gleich (Ja) sollte die Farbe grün und für "NEIN" rot sein.

1
Hannan Awan 24 Dez. 2015 im 17:09

2 Antworten

Beste Antwort

Sie können dies mit einem bedingten Operator tun:

 <asp:Label ID="lblVerified" ForeColor='<%# (Eval("post_verified").Equals("Yes")) ? "Green" : "Red" %>' runat="server" Text='<%# Eval("post_verified")%>' OnLoad="lblVerified_Load">

Arbeitete wie ein Zauber mit dieser kleinen Bearbeitung:

<asp:Label ID="lblVerified" runat="server" Text='<%# Eval("post_verified")%>' ForeColor='<%# (Eval("post_verified").Equals("yes")) ?  System.Drawing.Color.Green : System.Drawing.Color.Red %>'>
1
Hannan Awan 24 Dez. 2015 im 14:48

Angenommen, mit "in einem Repeater" meinen Sie, dass sich das Label in einem ItemTemplate oder einem AlternatingItemTemplate befindet, dann sollten Sie das ItemDataBound -Ereignis von Repeater anstelle des Das OnLoad -Ereignis des Labels, da das OnLoad -Ereignis zu früh auftritt.

Sie müssen den Ereignishandler deklarieren ...

repearter1.ItemDataBound += repearter1_ItemDataBound;

Dann können Sie im Event-Handler das Label-Steuerelement finden und bearbeiten ...

 void repearter1_ItemDataBound(object sender, RepeaterItemEventArgs e)
 {
            Label lblVerified = e.Item.FindControl("lblVerified") as Label;

            if (lblVerified != null)
            {
                 //TODO: manipulate the control
            }
  }

Beachten Sie, dass Sie Datenelemente auch aus dem ItemDataBound -Ereignis abrufen können, wenn Sie Folgendes tun ...

var dataItem = e.Item.DataItem as WhateverTheUnderlyingTypeIs;
1
Leo 24 Dez. 2015 im 14:22