It is fine to use Eval. You do pay for this some performance penalty, but it
might be insignificant. You gain independence of the datasource. Whether it
is a table, or an array or whatever else, Eval takes care of it.
The alternative is to have expressions like
<%# ((DataRowView)Container.DataItem)["BookTitle"] %>
This is good for a datatable, but won't work if you change the datasource to
Software Developer & Consultant
Microsoft MVP [ASP.NET]