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?
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?
Jag trodde "#" bara var en genväg till response.write?
emissionMedlem sedan dec. 19996 721 inlägg 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.
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 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 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å %>