1

asp.netアプリケーションがあり、ユーザーコントロールにリピーターを追加し、リピーター内に追加しましたasp Checkbox

<asp:Repeater ID="Repeater1" runat="server" 
    onitemdatabound="Repeater1_ItemDataBound" 
    onitemcommand="Repeater1_ItemCommand" >
    <ItemTemplate>
        <table>
            <tr>
                <td>    
                     <asp:CheckBox runat="server" ID="chkSelect" AutoPostBack="true" Visible="false" OnCheckedChanged="chkSelect_CheckedChanged" />
                </td>

CodeBehind ファイル内:

 protected void chkSelect_CheckedChanged(object sender, EventArgs e)
        {
            string s = "";
        }

ただし、チェックボックスをクリックしてもイベントは発生しません。

また、リピーター コントロールの itemDataBound イベントが発生したときに、イベントを動的に追加しようとしました。

<asp:Repeater ID="Repeater1" runat="server" 
    onitemdatabound="Repeater1_ItemDataBound" 
    onitemcommand="Repeater1_ItemCommand" >
    <ItemTemplate>
        <table>
            <tr>
                <td>    
                     <asp:CheckBox runat="server" ID="chkSelect" AutoPostBack="true" Visible="false" />
                </td>

コードビハインドで:

   protected void Repeater1_ItemDataBound(object sender, RepeaterItemEventArgs e)
        {
            if (((DataRowView)e.Item.DataItem).Row["DataType"].ToString().Trim().Equals("bool"))
            {
                CheckBox chkSelect = (CheckBox)e.Item.FindControl("chkSelect");
                chkSelect.CheckedChanged += new EventHandler(chkSelect_CheckedChanged);
                chkSelect.Visible = true;
            }

しかし、まだイベントは発生しません..

Repeater コントロール内にある CheckBox コントロールのイベントを呼び出す方法...

4

2 に答える 2

0

ItemCreatedイベントではなくイベントに接続すると、イベントを発生させることができる場合がありますItemDataBound

protected void Repeater1_ItemCreated(object sender, RepeaterItemEventArgs e)
   {
       CheckBox chkSelect = (CheckBox)e.Item.FindControl("chkSelect");
       if(chkSelect != null)
       {
            chkSelect.CheckedChanged += new EventHandler(chkSelect_CheckedChanged);
            chkSelect.Visible = true;
       }
   }

その理由はItemDataBound、データバインディングでのみ起動するためです。したがって、ポストバックすると、RepeaterはViewStateから再構築ItemCreatedされ、すべての行に対して実行されますが、実行されItemDataBoundません。

于 2013-02-21T17:29:02.113 に答える
0

ロジックを反転するだけです。

CheckBoxデフォルトでCheckedChangedハンドラを使用して可視を作成します。

<asp:Repeater ID="Repeater1" runat="server" 
    onitemdatabound="Repeater1_ItemDataBound" 
    onitemcommand="Repeater1_ItemCommand" >
    <ItemTemplate>
        <table>
            <tr>
                <td>    
                     <asp:CheckBox runat="server" ID="chkSelect" AutoPostBack="true" OnCheckedChanged="chkSelect_CheckedChanged" />
                </td>

ItemDataBoundイベントでは、Visible=false表示したくないものを設定します。

protected void Repeater1_ItemDataBound(object sender, RepeaterItemEventArgs e)
{
    if (!((DataRowView)e.Item.DataItem).Row["DataType"].ToString().Trim().Equals("bool"))
    {
        CheckBox chkSelect = (CheckBox)e.Item.FindControl("chkSelect");
        chkSelect.Visible = false;
    }
}
于 2013-02-21T22:06:26.417 に答える