Динамически добавленное событие списка не запускается - PullRequest
1 голос
/ 29 марта 2012

Моя проблема заключается в том, что, когда я нажимаю на одно окно списка, другое окно списка должно отображаться с динамически связанными значениями.Отображается список, но событие списка не запускается.Событие lb_SelectedIndexChanged не запускается.

protected void Page_Load(object sender, EventArgs e)
{
    if (!IsPostBack)
    {
        SqlCommand com = new SqlCommand("select EmpId,EmpName from OrgChart where      ManagerID=0", con);
        con.Open();
        SqlDataReader dr = com.ExecuteReader();
        int i=0;

        while (dr.Read())
        {
            empid[i] = Convert.ToInt32(dr[0].ToString());
            ename[i] = dr[1].ToString();
            i++;
        }

        for(int j=0;j<i;j++)
            ListBox1.Items.Add(empid[j]+"-"+ename[j]);

        ListBox1.Items.Add("create new");
    }
}

protected void ListBox1_SelectedIndexChanged(object sender, EventArgs e)
{
    Table1.Visible =false;
    Table2.Visible = false;
    string comand = ListBox1.SelectedValue.ToString();
    if (comand == "create new")
    {
        Table1.Visible = true;
    }
    else
    {
        Table2.Visible = true;
        string[] emp = comand.Split('-');
        getdetails(Convert.ToInt32(emp[0]));
    }
}

static ListBox lb = new ListBox();           
void getdetails(int empid)
{
    managerid = empid;
    con.Open();
    com = new SqlCommand("select EmpId,EmpName from OrgChart where ManagerID=" + managerid + "", con);
    dr = com.ExecuteReader();

    lb.ID = "lb1";
    lb.AutoPostBack = true;

    while (dr.Read())
    {
        lb.Items.Add(dr[0].ToString() + "-" + dr[1].ToString());
    }

    lb.Items.Add("create new");

    lb.SelectedIndexChanged += new EventHandler(this.lb_SelectedIndexChanged);

    this.Controls.Add(lb);
}

void lb_SelectedIndexChanged(object sender, EventArgs e)
{
    Table1.Visible = false;
    Table2.Visible = false;
    getdetails(managerid);
    string comand = ((ListBox)sender).SelectedValue.ToString();
    if (comand == "create new")
    {
        Table1.Visible = true;
    }
    else
    {
        Table2.Visible = true;
        string[] emp = comand.Split('-');
        getdetails(Convert.ToInt32(emp[0]));
    }

Ответы [ 2 ]

1 голос
/ 22 апреля 2013

добавьте ваш список событий oninit, потому что некоторые события не будут инициированы с событием onload

1 голос
/ 29 марта 2012

Необходимо установить для свойства .AutoPostBack значение true.

В вашем примере кода это похоже на

if (!IsPostBack)
{
   //...
   ListBox1.AutoPostBack = true;
   //...

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...