Broam の質問への回答「データバインド メソッドでこれを行う方法はありますか? "controls[0]" をハードコーディングしたくないのは、ずさんなためです」
protected void ListView1_DataBound(object sender, EventArgs e)
{
ListView mylist = ((ListView)sender);
ListViewItem lvi = null;
if (mylist.Controls.Count == 1)
lvi = mylist.Controls[0] as ListViewItem;
if (lvi == null || lvi.ItemType != ListViewItemType.EmptyItem)
return;
Literal literal1 = (Literal)lvi.FindControl("Literal1");
if (literal1 != null)
literal1.Text = "No items to display";
}
残念ながら、Controls[0] を使用しない方法は見つかりませんでした。
通常の Item イベント (ItemDataBound または ItemCreate) では、ListViewItemEventArgs の e.Item を使用して ListViewItem を取得できます。DataBound イベントには、ジェネリック EventArgs のみがあります。
その上、 ((Control)sender).FindControl("Literal1") も機能しないようです(ツリーの上部にあるリストビューからコントロールを見つける)ため、 Controls[0] を使用します。 FindControl(...) (リストビュー項目からコントロールを見つけます)。