Xpoint
   [напомнить пароль]

событие у linkbutton

Метки: [без меток]
2009-05-14 01:34:07 [обр] vladlen09[досье]

Добрый вечер, друзья-товарищи. Хотел сделать что-то типа простенькой навигации,
при помощи linkbutton'ов.
При загрузке страницы появляются линкбаттоны с названиями типов оборудования(холодильное, механическое и тд). При выборе определенного типа оборудования (событие onLinkClick) появляются линкбаттоны с подтипами, а при выборе подтипа (событие onLinkClick2)- список оборудования. Надеюсь понятно объяснил. Так вот, при нажатии на подтип оборудования, ничего не происходит (событие onLinkClick2 неправильно срабатывает) - мало того, все линкбаттоны с подтипами исчезают , а при нажатии на тип опять появляются.
Подскажите пожалуйста в чем дело! ASP.NET изучаю недавно, так что не пинайте сильно.

вот код:

private void Page_Load(object sender, System.EventArgs e)
{
sqlCon.Open();
reader = cmd.ExecuteReader();

while (reader.Read())
{
Panel pn=new Panel();
LinkButton lb = new LinkButton();
lb.Text = reader["eqkind_name"].ToString();
lb.Click += new EventHandler(onLinkClick);
Panel1.Controls.Add(pn);
pn.Controls.Add(lb);
}
reader.Close();

}

public void onLinkClick(object sender, EventArgs e)
{
cmd2.CommandText="select eqtype_name from equipment_type where eqkind_id =(select eqkind_id from equipment_kind where eqkind_name='"+((LinkButton)sender).Text+"')";
r2 = cmd2.ExecuteReader();

while (r2.Read())
{
Panel pn2=new Panel();
LinkButton lb2 = new LinkButton();
lb2.Text = r2["eqtype_name"].ToString();
lb2.Click += new EventHandler(onLinkClick2);
Panel2.Controls.Add(pn2);
pn2.Controls.Add(lb2);
}
r2.Close();

}

public void onLinkClick2(object sender, EventArgs e)
{

cmd3.CommandText="select eq_name from equipment where eqtype_id =(select eqtype_id from equipment_type where eqtype_name='"+((LinkButton)sender).Text+"')";
r3 = cmd3.ExecuteReader();

while (r3.Read())
{
Panel pn3=new Panel();
LinkButton lb3 = new LinkButton();
lb3.Text = r3["eq_name"].ToString();
lb3.Click += new EventHandler(onLinkClick3);
Panel3.Controls.Add(pn3);
pn3.Controls.Add(lb3);
}
r3.Close();

}

public void onLinkClick3(object sender, EventArgs e)
{
}

спустя 1 час 47 минут [обр] Василий Свиридов(47/175)[досье]

Если вы создаёте контролы вручную - на вас ложиться обязанность рендерить их после каждого postback и следить за их состоянием. Это большой геморрой.

Вам лучше будет создать 3 DataBound контрола типа DropDownList и заполнять их по мере выбора каждого уровня.

При этом после каждого события будет возникать PostBack эвент, так что в PageLoad лучше добавить проверку, чтобы не нагружать базу.

void Page_Load(object sender, EventArgs e)
{
    if(!IsPostBack)
    {
        //Загрузить основную выборку данных
    }

}
спустя 2 минуты [обр] Василий Свиридов(47/175)[досье]
И, для общего развития - ASP.Net совсем не, скажем, PHP, поэтому не стоит пытаться на нём писать, как если бы это был PHP. Лучше сразу вкуриться в специфику, многие вещи станут намного понятнее. Все эти PostBack'и, эвенты, и прочие...
Powered by POEM™ Engine Copyright © 2002-2005