Как да вземете контролата, която е причинила обратно изпращане, ако присъства в ListView ItemTemplate

В момента работя върху проект, който включва създаване на въпросник от списък с въпроси в базата данни. Използвам контролата ListView със страниране, за да покажа всеки въпрос и неговия избор от отговори. Възможностите за избор са RadioButtons с активирано автоматично обратно изпращане.

Когато се щракне върху бутон за избор и се предизвика обратно изпращане, искам да взема текста, свързан с бутона за избор, и да го вмъкна в друга таблица на база данни, която записва отговорите за всеки въпрос. Тъй като бутонът за избор е вътре в контролата за изглед на списък, не съм сигурен как да обработвам обратно изпращане за това. Имам нужда от помощ при намирането на бутона за избор, който е причинил обратно изпращане. Нов съм в ASP.Net, моля, помогнете ми с това. Благодаря.


person Ashwin    schedule 11.09.2012    source източник


Отговори (2)


RadioButton има събитие CheckedChanged които можете да използвате, за да вземете текста, от който се нуждаете.

Пример:

<asp:RadioButton ID="radio1" runat="server"
  OnCheckedChanged="radio1_CheckedChanged" />

void radio1_CheckedChanged(object sender, EventArgs e)
{
   string text = ((RadioButton)sender).Text;
}

Или просто можете да използвате контролния идентификатор:

void radio1_CheckedChanged(object sender, EventArgs e)
{
   string text = radio1.Text;
}
person Alessandro    schedule 11.09.2012
comment
Благодаря. Но има ли разлика в начина, по който обработваме събитието CheckedChanged за контроли в списъчен изглед от контроли, които са извън него? Питам това, тъй като прочетох някъде, че методът FindControl не намира контролите в шаблона на елемента в списъка. Чудех се дали е същият случай с CheckedChanged. - person Ashwin; 11.09.2012
comment
Не... CheckedChanged е събитие, което контролата checkbox ще извика, няма значение дали е в изглед на списък или не, и пак ще можете да поставите sender като квадратче за отметка. Ако обработвате събитие за изглед на списък, като ItemDataBound, тогава ще трябва да използвате FindControl, за да намерите квадратчето за отметка, което искате. - person Dave Zych; 11.09.2012
comment
Не, начинът, по който се справяте със събитията, е същият. Разликата е, че когато дадена контрола е в шаблона на друга контрола (т.е. ItemTemplate), трябва да използвате FindControl (в този случай в ListViewItem), за да получите достъп до нея. - person Alessandro; 11.09.2012
comment
Благодаря много Alessadro и @DaveZych. Това проработи. Вие, момчета, спасихте деня ми! - person Ashwin; 11.09.2012

Можете да използвате аргумента sender на манипулатор на събития. Например в CheckBox' CheckedChanged-събитие :

void Check_Clicked(Object sender, EventArgs e) 
{
    var checkBox = (CheckBox) sender;
    String text = checkBox.Text;
}

Това работи с всяко събитие, винаги можете да получите препратка към контролата, която е повдигнала това събитие чрез sender.

person Tim Schmelter    schedule 11.09.2012
comment
Всеки път, когато щракна върху въпрос за asp.net и за datagrids, gridviews, списъци и т.н., можете да разчитате, че @Tim Schmelter вече е отговорил...+1 - person JonH; 11.09.2012