Visual Studio は、Repeater にネストされたコントロールを取得しません。このためには、FindControl を使用して Repeater のコントロールにアクセスする必要があります。
Repeater 内のコントロールにアクセスするために使用できる 2 つの例を次に示します。
1) リピーターアイテムのループ
foreach (RepeaterItem item in tableData.Items)
{
if (item.ItemType == ListItemType.Item || item.ItemType == ListItemType.AlternatingItem)
{
var ph = (PlaceHolder)item.FindControl("tableBody");
//Do something with your placeholder
ph.Visible = true;
}
}
2)ItemDataBound
リピーターでイベントを利用する
void tableData_ItemDataBound(object sender, RepeaterItemEventArgs e)
{
if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
{
var ph = (PlaceHolder) e.Item.FindControl("tableBody");
//Do something with your placeholder
ph.Visible = true;
}
}
イベントの使用を計画しているItemDataBound
場合は、リピーターに次の属性を追加する必要があります。
OnItemDataBound="tableData_ItemDataBound"
プレースホルダーで何をしたいのか明確にしていただけますか? プレースホルダーには「innerHTML」プロパティはありません。あなたは JavaScript を誤解していると思います。リピーター内のコントロールにHtmlを入力したいと思います。代わりにリテラルを使用できます。
編集
リテラルを使用して、データベースからのデータに基づいてリピーターを動的に設定します。
void tableData_ItemDataBound(object sender, RepeaterItemEventArgs e)
{
if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
{
//Get column from datasource
DataRowView drv = (DataRowView)e.Item.DataItem;
var lit = (Literal) e.Item.FindControl("MyLiteral");
//Populate Literal with data
StringBuilder htmlMarkup = new StringBuilder();
htmlMarkup.AppendFormat("{0}<br />", drv["username"].ToString());
htmlMarkup.AppendFormat("{0}<br />", drv["Name"].ToString());
htmlMarkup.AppendFormat("{0}<br />", drv["lastname"].ToString());
lit.Text = htmlMarkup.ToString();
}
}
ご覧のとおり、データを取得し、必要なものを必要な形式で出力しています。