保護された変数があり、同じ行の他の列の値に基づいてリピーターの OnItemDataBound イベントで計算される <%# Bonus %> というリピーター itemtemplate で使用されます。
問題は、行のボーナス値が次の行に表示されることです。したがって、行 #1 の値は空白です。2 行目は 1 行目のボーナスを示し、3 行目は 2 行目のボーナス値を示します。バインドされた値は正常に表示されています。これは、間違った行に表示される計算値です。
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>