2010-07-07 6 views
1

У меня проблемы с обратной обработкой.Выберите из выпадающего списка, затем treeview - не удерживая позицию

У меня есть раскрывающийся список, в который я добавляю элементы во время выполнения. Когда я выбираю элемент в dropbox, древовидное изображение заполняется элементами, которые имеют одинаковое значение PID как объект, выбранный в раскрывающемся списке.

Но когда я выбираю узел в дереве, все возвращается в «нормальное» состояние. Dropbox перейдет к selectindex -1, и дерево исчезнет.

У меня есть контроллеры на главной странице, если это имеет значение.

Это мой код.

public partial class Nemanet : System.Web.UI.MasterPage 
{ 
    nemanetDataContext dc = new nemanetDataContext(); 
    Guid userGuid = (Guid)Membership.GetUser().ProviderUserKey; 
    bool reloadPeriod = true; 

    protected void Page_Load(object sender, EventArgs e) 
    { 

     if (!IsPostBack) 
     { 

      if (reloadPeriod == true) 
      { 
       reloadPeriod = false; 
       var query = from n in dc.Nemanet_Navigations 
          where n.UserId == userGuid && n.Nav_pID == null 
          orderby n.Nav_Name ascending 
          select n; 

       foreach (var period in query) 
       { 
        ListItem period_listitem = new ListItem(period.Nav_Name, period.Nav_ID.ToString()); 
        dropdown_navigation.Items.Add(period_listitem); 
       } 

      } 

     } 

    } 

    protected void dropdown_navigation_SelectedIndexChanged(object sender, EventArgs e) 
    { 
     treeview_Navigation.Nodes.Clear(); 

     var query = from n in dc.Nemanet_Navigations 
        where n.UserId == userGuid 
        orderby n.Nav_Name ascending 
        select n; 


     foreach (var course in query) 
     { 
      if (course.Nav_pID.ToString() == dropdown_navigation.SelectedValue) 
      { 
       TreeNode course_node = new TreeNode(course.Nav_Name, course.Nav_ID.ToString()); 
       course_node.NavigateUrl = "Default.aspx?navigateID=" + course.Nav_ID; 
       treeview_Navigation.Nodes.Add(course_node); 


       foreach (var chapter in query) 
       { 
        if (chapter.Nav_pID.ToString() == course_node.Value) 
        { 
         TreeNode chapter_node = new TreeNode(chapter.Nav_Name, chapter.Nav_ID.ToString()); 
         chapter_node.NavigateUrl = "Default.aspx?navigateID=" + chapter.Nav_ID; 
         course_node.ChildNodes.Add(chapter_node); 


         foreach (var subject in query) 
         { 
          if (subject.Nav_pID.ToString() == chapter_node.Value) 
          { 
           TreeNode subject_node = new TreeNode(subject.Nav_Name, subject.Nav_ID.ToString()); 
           subject_node.NavigateUrl = "editor.aspx?navigateID=" + subject.Nav_ID; 
           chapter_node.ChildNodes.Add(subject_node); 
          } 
         } 
        } 
       } 
      } 
     } 

    } 

} 

ответ

1

Любых динамически добавляемые элементы пропадут после любого постбэк, поэтому вы должны добавить все из них снова после каждого постбэк (ваша страница перестраивать от земли с помощью FrontPage и загрузку страницы).

Чтобы не перезагружать все данные из базы данных, храните их в сеансе.

Session["items"] = query; 

if(IsPostBack) foreach(var period in (Collection)Session["items"]) dropdown_navigation.Items.Add(new ListItem(period.Nav_Name, period.Nav_ID.ToString())); 
+0

У меня есть ошибка в части коллекции. Кроме того, это не будет выбирать тот же элемент, который был выбран до обратной передачи, как бы я это сделал? – eski

Смежные вопросы