Привет,
возник такой вот чайниковский вопрос:
У меян есть несколько контролов типа LinkButton. Поскольку их кол-во и свойства в design-time мне неизвестны, приходиться их генерить в run-time из codebehind. Вообще говоря, эти контролы предназначены для управления DataGrid (типа, расширение Пейджера).
Так вот, проблема в том, что я не могу перехватить событие Command. При этом, если аналогичный LinkButton добавить в дизайнере, то все работает без проблем.
Отсюда вопрос: как c этим бороться?
Зарание спасибо всем ответившим.
PS: C#, VS2003, .NET 1.1.4322SP1
// Вот так я генерирую LinkButton и добавляю его на страницу
LinkButton lb = new LinkButton();
lb.Text = i.ToString();
lb.ID = "lb_" + lb.Text;
lb.CssClass = "PageLinks";
lb.CausesValidation = true;
lb.EnableViewState = true;
lb.Visible = true;
lb.CommandName = lb.Text;
lb.Command += new CommandEventHandler(this.NavigationLink_Click);
PagerPanel.Controls.Add(lb);
// ...
// А вот так пытаюсь его обрабатывать
protected void NavigationLink_Click(object sender, CommandEventArgs e)
{
switch (e.CommandName)
// ...
}
А где именно добавляются на страницу кнопки? Весь код вообщем в студию.
Ну а для пейджера можно глянуть
это и
это.
Раб, который обожает своего хозяина, уже не раб, а холуй.
В.И. Ульянов.
данное сообщение получено с www.gotdotnet.ru
ссылка на оригинальное сообщение
Здравствуйте, mymus, Вы писали:
M>Привет,
M>возник такой вот чайниковский вопрос:
M>У меян есть несколько контролов типа LinkButton. Поскольку их кол-во и свойства в design-time мне неизвестны, приходиться их генерить в run-time из codebehind. Вообще говоря, эти контролы предназначены для управления DataGrid (типа, расширение Пейджера).
M>Так вот, проблема в том, что я не могу перехватить событие Command. При этом, если аналогичный LinkButton добавить в дизайнере, то все работает без проблем.
M>Отсюда вопрос: как c этим бороться?
M>Зарание спасибо всем ответившим.
M>PS: C#, VS2003, .NET 1.1.4322SP1
M>M>// Вот так я генерирую LinkButton и добавляю его на страницу
M>LinkButton lb = new LinkButton();
M>lb.Text = i.ToString();
M>lb.ID = "lb_" + lb.Text;
M>lb.CssClass = "PageLinks";
M>lb.CausesValidation = true;
M>lb.EnableViewState = true;
M>lb.Visible = true;
M>lb.CommandName = lb.Text;
M>lb.Command += new CommandEventHandler(this.NavigationLink_Click);
M>PagerPanel.Controls.Add(lb);
M>// ...
M>// А вот так пытаюсь его обрабатывать
M>protected void NavigationLink_Click(object sender, CommandEventArgs e)
M>{
M> switch (e.CommandName)
M> // ...
M>}
M>
Может ты его не подключаешь повторно после отправки постбека ??
Здравствуйте, Аноним, Вы писали:
А>Может ты его не подключаешь повторно после отправки постбека ??
Ага, значит, если я верно понял, для правильной обработки событий мне необходимо всегда (в том числе при постбеках) подключать обработчики. Для компонент, которые сгенерированы дизайнером, Студия кидает это в InitializeComponent(). Но тогда вопрос другой: что делать если у меня в момент, когда выполняется InitializeComponent() еще не известно кол-во этих контролов и их свойства. Они станут известными только после выполнения запроса к БД. А метод, который это (запрос) сделает, сам вызывается из колбека. Замкнутый круг
-an
Здравствуйте, mymus, Вы писали:
M>Здравствуйте, Аноним, Вы писали:
А>>Может ты его не подключаешь повторно после отправки постбека ??
M>Ага, значит, если я верно понял, для правильной обработки событий мне необходимо всегда (в том числе при постбеках) подключать обработчики. Для компонент, которые сгенерированы дизайнером, Студия кидает это в InitializeComponent(). Но тогда вопрос другой: что делать если у меня в момент, когда выполняется InitializeComponent() еще не известно кол-во этих контролов и их свойства. Они станут известными только после выполнения запроса к БД. А метод, который это (запрос) сделает, сам вызывается из колбека. Замкнутый круг
M>-an
Понял верно.
Ну не обязательно же подключать обработчики в InitializeComponent. Подключить обработчик надо до того, как закончит выполняться Page_Load, так как попытка вызвать обработчик возникает именно после ее окончания. А где именно ты его подключишь — не важно.
Очень удобное место для всяких действий —
OnPreRender. Всё уже сформировано, инициализировано...
данное сообщение получено с www.gotdotnet.ru
ссылка на оригинальное сообщение