Как найти метку в повторителе asp - PullRequest
1 голос
/ 09 июня 2010

Структура моего жереха: повторитель

repeater
    updatePanel
         label1 (rating)
         button (updates rating)
         some_picture (thing being rated)
     /update panel
/repeater

Представьте себе выход вышеупомянутого повторителя, содержащего 100 строк. (1 метка и 1 кнопка в каждом ряду).

Цель: когда я нажимаю кнопку, я хочу обновить соответствующий ярлык. Я не знаю, как это сделать. Я могу ссылаться на ярлык через:

Label myLabel2Update = (Label)Repeater1.Controls[0].Controls[0].FindControl("Label1");

Но, конечно, это будет один и тот же ярлык каждый раз (не обязательно тот, который нужно обновлять). Мне нужно обновить метку, которая находится в той же строке, что и кнопка.

Любое руководство будет оценено.

Ответы [ 3 ]

3 голосов
/ 09 июня 2010

Обработка события ItemCommand ретранслятора. В вашем обработчике событий проверьте свойство Item аргументов события и используйте findcontrol для этого. например,

protected void Repeater1_ItemCommand(object source, RepeaterCommandEventArgs e)
{
    Label Label1 = (Label)e.Item.FindControl("Label1");
}

Метка1 будет меткой в ​​том же элементе, что и кнопка, на которую вы нажали.

Или в ответ на комментарий ученика доктора Вили вы можете сделать следующее

protected void Repeater1_ItemCommand(object source, RepeaterCommandEventArgs e)
{
    switch (e.CommandName)
    {
        case "bClick":
            Label Label1 = (Label)e.Item.FindControl("Label1");
            /*do whatever processing here*/
            break;            
    }
}

А затем для каждой кнопки укажите название команды «bClick»

0 голосов
/ 09 июня 2010

Я предполагаю, что есть обработчик события для кнопки?Если это так, вы должны быть в состоянии сделать

protected virtual void OnClick(object sender, EventArgs e)
{
    var label = ((WebControl)clickedButton).Parent.FindControl("Label1");
}
0 голосов
/ 09 июня 2010

Вам понадобится вспомогательный метод для итерации по иерархии или для этого используйте метод FindControl(string id) элемента управления.

Пример:

var stateLabel = (Label)e.Row.FindControl("_courseStateLabel");
...