private void Page_Load(object sender, System.EventArgs e)
{
    if(Context.User.Identity.IsAuthenticated)
    {
if(!IsPostBack)
{
        DataSet dataSet = role.GetRolePermissionModule(Int32.Parse(Session["RoleID"].ToString()),Session["DriveSchool"].ToString());
    this.ViewState["PermissionList"] = dataSet;
    AddTree("学员",(TreeNode)null);
}
    }
}public void AddTree(string pName,TreeNode pNode)
{
    DataSet ds= (DataSet)this.ViewState["PermissionList"];
    DataView dvTree = new DataView(ds.Tables["PermissionList"]);
    dvTree.RowFilter ="M_Name2='" + pName + "'";
    foreach(DataRowView Row in dvTree)
    {
TreeNode Node=new TreeNode();
if(pNode == null)
{   //添加根节点
        Node.Text = Row["M_Name3"].ToString();
    Menu.Nodes.Add(Node);
    Node.Expanded=true;
    AddTree(Row["M_Name3"].ToString(),Node);//再次递归
}
else
{   //添加当前节点的子节点
    Node.Text = Row["M_Name3"].ToString();
    pNode.Nodes.Add(Node);
    Node.Expanded = true;
    AddTree(Row["M_Name3"].ToString(),Node);//再次递归
}
    }
}
/////////////////////////////////////
总是提示说:  DataView dvTree = new DataView(ds.Tables["PermissionList"]);(这句出错)
              未将对象引用设置到对象的实例。
不知道哪里错了???????????

解决方案 »

  1.   

    你的DataSet中的DataTable的名字不叫"PermissionList"
    跟踪一下,看看ds.Tables[0].TableName是多少
      

  2.   

    同意楼上,另,不要把dataset放在viewstate里,会有问题。
      

  3.   

    viewstate中的datatable有问题
      

  4.   

    DataView dv = new DataView();
               // DataRowView drv;
                TreeNode tmpNd;
                string intId;
                string mySql = "SELECT property_id P_ID,ProPerty_Desc p_name,property_level P_level,parent_property_id par_id  FROM com_define_property_desc ";
                mySql = mySql + "WHERE  property_id = 9 OR parent_property_id = 9 AND enabled_flag = 'Y'";            
                //DataReader myds = OracleHelper.ExecuteReader(mySql);
                //dv.Table = 
                try
                {
                    DataTable tab = OracleHelper.GetDataTableOfRecord(mySql);
                     
                    dv = tab.DefaultView;                dv.RowFilter = "par_id = " + ParentId + "";
                    foreach( DataRowView drv in dv)
                    {
                        tmpNd      = new TreeNode();
                        intId      = drv["P_ID"].ToString();
                        tmpNd.ID   = intId;
                        tmpNd.Text = drv["p_name"].ToString();
                        Nds.Add(tmpNd);
                    
                        InitTree(Nds[Nds.Count - 1].Nodes,intId);//递归                    
                        if(intId == "0")
                        {
                            tmpNd.Expanded = true;
                        }
                    }
                }
                catch(Exception ex)
                {
                    throw new Exception("",ex);
                }我刚做的
      

  5.   

    private void InitTree(TreeNodeCollection Nds ,string ParentId)
    {
      上面那段内容
    }
      

  6.   

    显然,数据集(ds.Tables)中没有定义为PermissionList的这个表。
      

  7.   

    终于把问题搞定了,谢谢各位的回复!
    问题错在了这里:
    Session["DriveSchool"]没有传过来!
    DataSet dataSet = role.GetRolePermissionModule(Int32.Parse(Session["RoleID"].ToString()),Session["DriveSchool"].ToString());