0

保護された変数があり、同じ行の他の列の値に基づいてリピーターの 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>
4

2 に答える 2