0

我一直在打猎,我不知道这是否可能。我有一个按钮(在中继器内),此按钮的文本由数据集中返回的几个值确定,如下所示:

Text='<%# DataBinder.Eval(Container.DataItem, "eventnumber") + "|" + DataBinder.Eval(Container.DataItem, "type" )%>'

但是我想做的是根据 eventnumber 中是否有值来切换分配的字段。像这样的东西:

Text='<%# DataBinder.Eval(Container.DataItem, "eventnumber")!=""?DataBinder.Eval(Container.DataItem, "eventnumber"):DataBinder.Eval(Container.DataItem, "productid") + "|" + DataBinder.Eval(Container.DataItem, "type" )%>'

但我似乎无法让它工作。(在这种情况下,我没有收到任何错误,但文本为空)

有人可以帮忙吗?

谢谢你,克雷格

4

2 回答 2

0

那么最简单和最易读的方法是将转发器附加到事件ItemDataBound并在那里处理它。

private void repeater_ItemDataBound(Object Sender, RepeaterItemEventArgs e)
{
  if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem) 
  {
     var item = (YourType)e.Item.DataItem;
     var label = (Label)e.Item.FindControl("Label");

     if (!string.IsNullOrEmpty(item.eventnumber))
     {
         label.Text = item.eventnumber;
     }
     else
     {
         label.Text = item.productid + "|" + item.type;
     }
  }
}  
于 2013-07-11T09:40:27.457 回答
0

我强烈建议开始使用代码隐藏,ItemDataBound这里是最好的地方:

protected void Repeater1_ItemDataBound(object sender, RepeaterItemEventArgs e)
{
    if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
    {
        DataRowView row = (DataRowView) e.Item.DataItem;
        Button btn = (Button) e.Item.FindControl("ButtonID");
        object productID = row["productID"];
        object eventnumber = row["eventnumber"];
        object type = row["type"];
        if(DBNull.Value == eventnumber || string.IsNullOrWhiteSpace(eventnumber.ToString()))
        {
            btn.Text = string.Format("{0}|{1}", productID, type);
        }
        else
        {
            btn.Text = string.Format("{0}", eventnumber);
        }
    }
}
于 2013-07-11T09:45:07.240 回答