我有一个受保护的变量并在转发器项目模板中使用,<%# Bonus %> 根据同一行中其他列的值在转发器的 OnItemDataBound 事件中计算。
问题是一行的奖金值显示在下一行。所以对于第 1 行,该值为空白。第二行显示第 1 行的奖金,第三行显示第二行的奖金值,依此类推。界限值显示良好。这是显示在错误行中的计算值。
似乎在 OnItemDataBound 事件中计算了计算值,但由于某种原因,该值未用于当前行的呈现,而是用于下一行。
我究竟做错了什么?
更新
简化示例代码:
.......
protected Decimal Bonus;
.....
(then inside repeater OnItemDataBound handler)
.....
DataRowView row = (DataRowView) e.Item.DataItem;
Bonus = Convert.ToInt32(row["salary"]) * .01;
in ASPx:
.....
<asp:Repeater runat="server">
<ItemTemplate>
<td><%# Eval("salary") %> <== will show correct value
</td>
<td><#% Bonus %> <== doesn't show the bonus computed for that row from OnItemDataBound handler. Shows up in the next repeater row.
</td>
<ItemTemplate>