我在Page_Load事件中添加了如下加载数据库的操作,然后把数据库读出的值赋值给ProvinceNode类,
在页面中我选择一个TreeView的节点,然后把这个节点的有关信息记录到一个selectNode类中
然后点击查询按钮,查询selectNode的有关其它数据,
但是每次选中TreeView的节点或者单击查询按钮,Page_Load总会执行,导致我的ProvinceNode重新初始化,然后
selectNode的值又变为空置,所以一直查询不到数据,继而无法绘图
请问这种情况怎么解决呢?代码如下:
public partial class InqGraph : System.Web.UI.Page
{
    ProvinceNode provinceNode = new ProvinceNode();
    StNode selectNode = null;
    
    WindSpeedInqGraph windSpeedInqGraph = new WindSpeedInqGraph();
    protected void Page_Load(object sender, EventArgs e)
    {
        string connectString = @"Server=(Local); pwd=123456; uid=sa; database=LDRoadWeatherInfo";
        SqlConnection connection = new SqlConnection(connectString);        try
        {
            connection.Open();
        }
        catch (System.Exception ex)
        {
            Console.WriteLine(ex.ToString());
        }    
        tv_Stations.Nodes.Clear();            if(provinceNode.LoadStInfo())
            {
                TreeNode node = new TreeNode();
                node.Text = provinceNode.ProvinceName;
                tv_Stations.Nodes.Add(node);
                foreach (RoadNode roadNode in provinceNode.ForEachRoad)
                {
                    TreeNode node1 = new TreeNode();
                    node1.Text = roadNode.RoadName;
                    tv_Stations.Nodes[0].ChildNodes.Add(node1);
                    foreach (StNode st in roadNode)
                    {
                        TreeNode node2 = new TreeNode();
                        node2.Text = st.StName;
                        tv_Stations.Nodes[0].ChildNodes[st.RoadIndex].ChildNodes.Add(node2);
                    }
                }
                tv_Stations.ExpandAll();         }
                 GeneralInqSingleStReport tmp = new GeneralInqSingleStReport();
        WindSpeedInqGraph.selectNode = selectNode;
        tmp.BindReportViewer();
    }
    protected void ZedGraphWeb2_RenderGraph(ZedGraph.Web.ZedGraphWeb webObject, 
        System.Drawing.Graphics g, ZedGraph.MasterPane pane)
    {       
        windSpeedInqGraph.Draw(g, pane);
    }    protected void tv_Stations_SelectedNodeChanged(object sender, EventArgs e)
    {
        if (tv_Stations.SelectedNode.Depth == 2)
        {
            TreeNode node1 = tv_Stations.SelectedNode, node2 = tv_Stations.SelectedNode.Parent;
            int roadIndex, stIndex;
            stIndex = node2.ChildNodes.IndexOf(node1);
            roadIndex = node2.Parent.ChildNodes.IndexOf(node2);
            selectNode = provinceNode.GetStByIndex(roadIndex, stIndex);
        }
    }    protected void bt_Inq_Click(object sender, EventArgs e)
    {
        if (selectNode != null)
        {
            selectNode.InqByDay(2008, 1, 1, 24);
        }
    }
}

解决方案 »

  1.   

    你把不想执行的代码放在Page.IsPostBack
    protected void Page_Load(object sender, EventArgs e)
    {
        if (!Page.IsPostBack)
        {
            //不想执行的代码
        }
        //想执行的代码
    }
      

  2.   

    把这段代码放到一个if(!Page.IsPostBack)
    {
     //代码
    }
      

  3.   

    我也尝试过这种做法,但是这样有问题啊
    但我选中TreeView的一个节点的时候,结果tv_Stations.SelectedNode.Depth 出现异常
    tv_Stations.SelectedNode为null
     if (!IsPostBack)
            {
                if(provinceNode.LoadStInfo())
                {
                    TreeNode node = new TreeNode();
                    node.Text = provinceNode.ProvinceName;
                    tv_Stations.Nodes.Add(node);
                    foreach (RoadNode roadNode in provinceNode.ForEachRoad)
                    {
                        TreeNode node1 = new TreeNode();
                        node1.Text = roadNode.RoadName;
                        tv_Stations.Nodes[0].ChildNodes.Add(node1);
                        foreach (StNode st in roadNode)
                        {
                            TreeNode node2 = new TreeNode();
                            node2.Text = st.StName;
                            tv_Stations.Nodes[0].ChildNodes[st.RoadIndex].ChildNodes.Add(node2);
                        }
                    }
                    tv_Stations.ExpandAll(); 
                }
            }
      

  4.   

    tv_Stations以及其它变量包括ProvinceNode,selectNode在每次页面刷新的时候是不是都要重新初始化啊?
      

  5.   

    应该不会,至于为什么为null不太清楚
      

  6.   

    刚才弄错了,选中TreeView的一个节点的时候,结果tv_Stations.SelectedNode.Depth 不会出现异常 了
    但是provinceNode的值第一次加载的时候是对的
    但是页面再次刷新后,没有加载,这些值就不在了
    感觉ProvinceNodeNode被重新初始化了
      

  7.   

        protected void bt_Inq_Click(object sender, EventArgs e) 
        { 
         if (tv_Stations.SelectedNode.Depth == 2) 
            { 
             TreeNode node1 = tv_Stations.SelectedNode, node2 = tv_Stations.SelectedNode.Parent; 
                int roadIndex, stIndex; 
                stIndex = node2.ChildNodes.IndexOf(node1); 
                roadIndex = node2.Parent.ChildNodes.IndexOf(node2); 
                selectNode = provinceNode.GetStByIndex(roadIndex, stIndex); 
            }         if (selectNode != null) 
            { 
                selectNode.InqByDay(2008, 1, 1, 24); 
            } 
        } 
      

  8.   

    但是provinceNode变量如果不定义成static类型的话,则它的值为null