ListView テンプレート内にネストされたコントロールのプロパティにアクセスする方法を知りたいですか??
ListView テンプレート内に CheckBox コントロールがありますが、コード ビハインド ファイルでアクセスしようとすると IntelliSense に表示されません。
codeBehind ファイルでその CheckBox のプロパティにアクセスする方法を教えてください。
ItemDataBound
コントロールへの参照を取得するには、イベントを使用する必要がありますCheckBox
。イベントハンドラーでは、 (渡されたからの)メソッドItemDataBound
を使用して、で宣言された任意のコントロールへの参照を取得できます。FindControl
ListViewItemEventArgs
ItemTemplate
フロントページから接続するItemDataBound
には、次のようにします。
<asp:ListView ID="lv1" OnItemDataBound="lv1_ItemDataBound" runat="server">
への参照を取得するにはCheckBox
(以下の完全な例を参照)、コードは次のようになります。
private void lv1_ItemDataBound(object sender, ListViewItemEventArgs e)
{
//Get a reference and check each checkbox
var chk = e.Item.FindControl("chkOne") as CheckBox;
if (chk != null)
chk.Checked = true;
}
完全な例を次に示します。
<%@ Page Language="C#" AutoEventWireup="true" %>
<%@ Import Namespace="System.Collections.Generic" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<body>
<form id="form1" runat="server">
<div>
<asp:ListView ID="lv1" OnItemDataBound="lv1_ItemDataBound" runat="server">
<LayoutTemplate><div id="itemPlaceholder" runat="server"></div></LayoutTemplate>
<ItemTemplate>
<div><asp:CheckBox ID="chkOne" Runat="server" /> <%# Container.DataItem %></div>
</ItemTemplate>
</asp:ListView>
</div>
</form>
</body>
</html>
<script runat="server">
public void Page_Load(object sender, System.EventArgs e)
{
if(!Page.IsPostBack)
{
var items = new List<string> { "Item #1", "Item #2", "Item #3" };
lv1.DataSource = items;
lv1.DataBind();
}
}
private void lv1_ItemDataBound(object sender, ListViewItemEventArgs e)
{
//Get a reference and check each checkbox
var chk = e.Item.FindControl("chkOne") as CheckBox;
if (chk != null)
chk.Checked = true;
}
</script>