webForumDet fria alternativet

Templatefield

7 svar · 705 visningar · startad av clarkbones

clarkbonesMedlem sedan feb. 20013 023 inlägg
#1

Hej!

Har en gridview som presenterar data. Det finns en stored procedure som returnerar datat. Den vill jag helst inte ändra på då den används på flera ställen. Proceduren listar utbildningskurser.

I en gridview kolumn skulle jag vilja att det står "Aktiv" om kursen i fältet "Status" är 1, och "Inaktiv" om fältet är 0.

Nu skulle jag ville jag ha det så här:

 
<asp:TemplateField HeaderText="Status"><ItemTemplate>
<%
If DataBinder.Eval(Container.DataItem, "Status") = 1 Then Response.Write("Aktiv")
else
Response.Write("Inaktiv")
end if
%>
              
   </ItemTemplate>
   <ItemStyle Wrap="False" />
</asp:TemplateField>

Men jag får "Container not declared" fel?

Vad är bästa lösning?

clarkbonesMedlem sedan feb. 20013 023 inlägg
#2

Jag undrar fortfarande varför. Ett enkelt exempel kan väl illustrera:
Detta funkar inte:
<%
Response.Write(DataBinder.Eval(container.DataItem, "Kallelseskickad"))
%>

Felet är : "Name Container is not declared"

Detta funkar:
<%#DataBinder.Eval(container.DataItem, "Kallelseskickad")
%>

Dessa borde väl vara likvärdiga?

emissionMedlem sedan dec. 19996 721 inlägg
#3

Det magiska tecknet är #

clarkbonesMedlem sedan feb. 20013 023 inlägg
#4

Jag trodde "#" bara var en genväg till response.write?

emissionMedlem sedan dec. 19996 721 inlägg
#5

Nej, "=" är en genväg till Response.Write. "#" ger DataBind-context, och man ska inte använda Response.Write i denna context (så länge det rör sig om en vanlig sida så ska man ALDRIG använda Response.Write). Värdet evalueras, och om det är någon som ska skrivas ut så tar ASP.NET hand om det.

clarkbonesMedlem sedan feb. 20013 023 inlägg
#6

OK, tack. Kan man öht ha villkorslogik (if/else) i ett databindcontext? Man kanske inte bör ha det?

sortingMedlem sedan juni 200511 inlägg
#7

Nej det bör man inte ha. Det finns event som man kan använda sig utav för att lösa de bitarna. I ditt fall är det GridViewens RowDataBound-event du ska kika lite närmare på.

/Redigering, ändrade från ItemDataBound till RowDataBound.

inspiroMedlem sedan sep. 2005673 inlägg
#8

Man bör inte nej, men det går om man bara vill göra nåt snabbhack... :) Typ så här kan man göra:

<%# ((int)DataBinder.Eval(container.DataItem, "Kallelseskickad") == 1) ? gör si : gör så %>
130 ms totalt · 3 externa anrop · v20260731065814-full.30151723
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
127 ms — hämta tråd, inlägg och bilagor (db)