【问题标题】:Computed variable for every repeater row shows up in the next row每个中继器行的计算变量显示在下一行
【发布时间】:2013-04-16 04:18:08
【问题描述】:

我有一个受保护的变量并在转发器项目模板中使用, 根据同一行中其他列的值在转发器的 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>

【问题讨论】:

  • row# 从 0 开始。你能显示你的代码吗
  • @Rab 不涉及行号。请参阅提供的代码。

标签: asp.net .net data-binding repeater


【解决方案1】:

OnItemDataBound 发生在绑定行之后。

当前行的所有值都存在于函数的参数中。

如果需要设置一个新的值,由于repeater不会在这个函数之后再次绑定值,你应该自己设置控件的文本。

  void myRepeater_ItemDataBound(Object Sender, RepeaterItemEventArgs e) {

      // This event is raised for the header, the footer, separators, and items.

      // Execute the following logic for Items and Alternating Items.
      if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem) {

         if (((Evaluation)e.Item.DataItem).Rating == "Good") {
            ((Label)e.Item.FindControl("BonusLabel")).Text= Bonus.ToString();
         }
      }
   }   

【讨论】:

    【解决方案2】:

    您可以绑定到执行计算的方法:

    代码隐藏

    public string CalculateBonus(object salaryValue)
    {
        int salary;
        string bonus;
        if (Int32.TryParse(salaryValue.ToString(), out salary))
        {
            bonus = (salary * .01).ToString();
        }
        else
        {
            bonus = "N/A"; //or whatever default value you want to return
        }
        return bonus;
    }
    

    aspx 页面

    <td><%# CalculateBonus(Eval("Salary")) %></td>
    

    【讨论】:

      猜你喜欢
      • 2023-03-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-03-14
      • 1970-01-01
      • 2021-10-04
      相关资源
      最近更新 更多