Выберите из выпадающего списка, затем древовидное представление - не удерживая позицию - PullRequest
1 голос
/ 07 июля 2010

У меня проблемы с обратной передачей.

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

Но когда я выбираю узел в древовидном представлении, все возвращается к «нормальному»государство.В раскрывающемся списке будет выбран индекс индекса -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 Ответ

1 голос
/ 07 июля 2010

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

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

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()));
...