webForumDet fria alternativet

Templatefield

.NET

7 svar · 705 visningar · startad av clarkbones

Medlem sedan feb. 20013 023 inlägg
Frågan#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?

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

Medlem sedan dec. 19996 721 inlägg
#3

Det magiska tecknet är #

Medlem sedan feb. 20013 023 inlägg
#4

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

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

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

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

Medlem 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å %>
257 ms totalt · 4 externa anrop · v20260731065814-full.86ec41c2
119 ms — deklarationer (db)
0 ms — hämta statistik (cache)
133 ms — hämta tråd, inlägg och bilagor (db)
122 ms — ändringar (db)