Обработка проверенного события внутреннего ретранслятора. Checkbox-контроль во вложенных репитерах asp.net. - PullRequest
1 голос
/ 09 августа 2011

У меня есть вложенные повторители на моей странице aspx. Во внешнем повторителе я отображаю список продуктов, а во внутреннем повторителе я показываю список дополнительных параметров, связанных с каждым продуктом. Внутренний повторитель содержит флажок, текстовое поле, метка и другие вещи. Я хотел бы найти элементы управления внутри внешнего повторителя, когда пользователь выбирает флажок во внутреннем повторителе. Чтобы справиться с этим, я использую следующий код.

<asp:Repeater ID="OuterRepeater" runat="server" 
        onitemdatabound="OuterRepeater_ItemDataBound" >
        <ItemTemplate>
    <asp:Label ID="CodeLabel" runat="server" Text='<%# Eval("Code") %>'></asp:Label>
     <asp:Repeater ID="InnerRepeater" runat="server" OnItemCreated="InnerRepeater_ItemCreated">
       <ItemTemplate>
    <asp:CheckBox ID="CheckBox1" runat="server" AutoPostBack="true"/> 
    <asp:TextBox ID="TextBox1" runat="server"></asp:TextBox> 
      ......
      .......
    </ItemTemplate>
    </asp:Repeater>
     ......
      ......
    </ItemTemplate>
    </asp:Repeater>


 protected void InnerRepeater_ItemCreated(object sender, RepeaterItemEventArgs e)
        {
            RepeaterItem ri = (RepeaterItem)e.Item;

            if (ri.ItemType == ListItemType.Item || ri.ItemType == ListItemType.AlternatingItem
            )
            {
                CheckBox cb = ri.FindControl("CheckBox1") as CheckBox;
                cb.CheckedChanged += new EventHandler(CheckBox1_CheckedChanged);
            }
        }

private void CheckBox1_CheckedChanged(object sender, EventArgs e)
        {          

            CheckBox cb = (CheckBox)sender;
            if (cb.Checked)
            {
                //do something
            }
            else
            {
              //do something
            }
        }

Но событие checkChanged флажка по какой-то причине не запускается. Также я не уверен, как получить доступ к текстовому полю внешнего повторителя в проверенном измененном событии элемента управления флажка внутреннего повторителя.

Может ли кто-нибудь помочь мне с этим?

Спасибо

Ответы [ 3 ]

4 голосов
/ 09 августа 2011

Событие CheckedChanged не вызывается, поскольку вы объявили обработчик события как private, вы должны сделать его Protected or Public

Protected void CheckBox1_CheckedChanged(object sender, EventArgs e)

Вы можете получить доступ к элементу управления Textbox, как ..

private void CheckBox1_CheckedChanged(object sender, EventArgs e)
{ 
  CheckBox checkBox = (CheckBox)sender;
  Textbox textbox1 = (TextBox)checkBox.Parent.FindControl("TextBox1");
  String textboxText = textbox1.Text;
}
0 голосов
/ 26 марта 2015

Ответ Мухаммеда Ахтара мне очень помог сегодня!Мне просто нужно было установить конкретный идентификатор для моих динамически генерируемых флажков внутри моего репитера, чтобы восстановить источник события и выполнить остальную часть обработки, и это сработало отлично.

chkAtivo.ID = DataBinder.Eval(e.Item.DataItem, "id").ToString();

Восстановлено так же, какобразец.Не могу голосовать еще, но спасибо.

0 голосов
/ 09 августа 2011

Не похоже, что вы определили обработчик событий в вашей разметке.

<asp:CheckBox ID="CheckBox1" runat="server" AutoPostBack="true" OnCheckedChanged="CheckBox1_CheckedChanged" /> 
...