0

私は狩りをしてきましたが、これが可能かどうかはわかりません。私が持っているのはボタン (リピーター内) で、このボタンのテキストは、次のように、データセットで返されるいくつかの値によって決まります。

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

しかし、私ができるようにしたいのは、イベント番号に値があるかどうかに応じて、割り当てられるフィールドを切り替えることです。このようなもの:

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 に答える