0

DataListの項目ごとにボタンを作成する必要がありますが、最後のボタンの形式を変える必要があるため、異なるcssクラスを適用する必要があります。

これはOntemDataBoundメソッドで行う必要があると思いますが、間違っている場合は遠慮なく修正してください。

私はこのようなことをしたい:

protected void dlDataList_ItemDataBound(object sender, DataListItemEventArgs e)
{
  if (e.Item.ItemIndex == dlDataList.Items.Count - 1) //This doesn't work like I'd hoped
  {
    Panel button = (Panel)e.Item.FindControl("btnButton");
    button.CssClass = ("altClass");
  }
  ...
}

問題は、dlDataList.Items.Countが常にItemIndexと同じであるため、データリストがItemDataBoundイベントに含まれるアイテムの数を認識していないことです。

最後のボタンにaltClasscssクラスを与える方法について何かアイデアはありますか?

4

5 に答える 5

2

DataListをバインドする前に、アイテムの総数をページレベル変数に保存します。次に、ItemDataBoundで、現在のインデックスがアイテムの総数(もちろん-1)と等しいかどうかを確認し、それに応じてcssクラスを設定します

于 2012-04-27T23:13:19.890 に答える
0
for (int i=0; i<= DataList1.Items.Count; i++)
{
    if (e.Item[i] == dlDataList.Items.Count - 1) //This doesn't work like I'd hoped
     {
       Panel button = (Panel)e.Item.FindControl("btnButton");
        button.CssClass = ("altClass");
      }
}
于 2012-04-27T22:53:37.567 に答える
0

通常、インデックスはゼロベースであるため、5つの要素を含むリストでは、最後の要素のインデックスは4になり、カウントは5になります。したがって、カウントから1を引くと、機能すると思います。

于 2012-04-27T22:57:20.727 に答える
0

アイテムはデータバインドされる直前に作成されるため、アイテムではなくデータリストのデータソースをクエリする必要があります。

protected void dlDataList_ItemDataBound(object sender, DataListItemEventArgs e)
{
    if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
    {
         // use the item's DataItem property or the DataList's DataSource property directly
         DataTable tbl = ((DataRowView)e.Item.DataItem).Row.Table;
         if (e.Item.ItemIndex == tbl.Rows.Count - 1)
         {
             // ....
         }
    }
}
于 2012-04-27T23:00:02.883 に答える
0

ItemDataBoundイベントは、データソース内のすべてのオブジェクトに対して発生します。したがって、アイテムがデータリストに追加されるたびに、そのインデックスは1高くなりますが、カウントも高くなるため、常に等しくなります。データリストのデータソースプロパティと比較して、そこからカウントを取得する必要があります。データソースには、リストの大きさに関する事前の知識があります。データソースを、データがバインドされているオブジェクトとしてキャストする必要があります。したがって、それがの場合は、次のList<string>ようなものを使用します。

if (e.Item.ItemIndex == ((List<string>)dlDataList.DataSource).Count - 1)

于 2012-04-27T23:27:09.220 に答える