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>
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")
%>
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.
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.