从下拉菜单中选择树视图 - 不保持位置

时间:2010-07-07 11:06:49

标签: c# asp.net linq-to-sql

我遇到回发问题。

我有一个下拉列表,我在运行时添加项目。 当我在保管箱中选择一个项目时,树状视图中的项目与下拉列表中选择的对象具有相同的pID值。

但是当我在树视图中选择一个节点时,一切都会回到“正常”状态。 Dropbox将转到selectindex -1,树视图将消失。

如果重要的话,我在主页面中有theese控制器。

这是我的代码。

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 个答案:

答案 0 :(得分:1)

任何动态添加的元素将在任何回发后消失,因此您在每次回发后都会再次添加所有元素(您的页面使用首页和页面加载从地面重建)。

为避免从数据库重新加载所有数据,请将其存储在会话中。

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