Лично я считаю установку значений элементов HTML в событии OnItemDataBound
более сложной, чем в коде ASP. Мне также не понравилось задавать значение переменной с помощью выражения привязки данных, так как оно, похоже, приводит к выводу значения в HTML.
Вот аналогичный способ сделать это, основываясь на других ответах:
1. Создайте защищенное поле в коде для использования в качестве переменной.
protected string className;
2. Используйте выражение привязки данных для назначения переменной.
<asp:Literal runat="server" Visible="false" Text="<%# className = "myrating" + DataBinder.Eval(Container.DataItem, "Day") %>" />
Обязательно сделайте это внутри скрытого серверного тега, чтобы результат выражения не отображался в результирующем HTML.
3. Используйте переменную внутри выражений привязки данных в коде ASP.
<ItemTemplate><br />
<input type="radio" class="<%# className %>" value="3" /><br />
<input type="radio" class="<%# className %>" value="4" /><br />
</ItemTemplate><br />
Обязательно используйте выражения для привязки данных для доступа к переменной. Другие типы выражений видят только значение переменной по умолчанию.
Я думаю, что основным недостатком этого подхода является использование поля, которое в идеале должно быть ограничено элементом ItemTemplate
.