public Sub CreateDataSet()’建立数据集  -----------
每次都要执行这个函数, 自然可以。 如果回发时没有建立
DataSet, 那在引用时, 会出错.

解决方案 »

  1.   

    过程:
    public Sub CreateDataSet()’建立数据集  
    Dim strsql As String ="select * from tree_info where parentid='folderstree'" 
    Dim myAdapter As new SqlDataAdapter(strsql,myconn)  
    dim ds as new dataset()  
    myadapter.fill(ds,"tree") 
    End Sub 
    中定义的ds对象是局部变量,当这个函数执行结束后,这个变量就没有办法引用了(因为是new创建的,所以直到页面结束,该对象空间还是存在的)
    过程:
    public Sub intiTree() '调用数据集 
    path.datasource=ds.tables("tree").defaultview 
    path.datatextfield="nodename" 
    path.datavaluefield="nodeid" 
    path.databind() 
    end sub
    中使用到ds变量,这个变量在程序中并没有定义为全局变量,也没有在本过程中定义,所以会报告ds:未将对象引用设置到对象的实例,更不用说ds.tables("tree").defaultview了。解决办法:1——
    采用全局变量定义ds;2——
    把前面的过程定义为函数,内容如下:
    public Function GetDataSet() as DataSet’建立数据集  
    Dim strsql As String ="select * from tree_info where parentid='folderstree'" 
    Dim myAdapter As new SqlDataAdapter(strsql,myconn)  
    dim ds as new dataset()  
    myadapter.fill(ds,"tree") 
    GetDataSet=ds;
    End Function然后在后面的过程中:
    public Sub intiTree() '调用数据集 
    path.datasource=GetDataSet().Tables("tree").DefaultView
    path.datatextfield="nodename" 
    path.datavaluefield="nodeid" 
    path.databind() 
    end sub上面的两个方法,如果你的ds在多个地方使用,那么第一个方法好,否则,使用第二个方法。
    事实上,使用第二个方法,我们还可以给它传递相关参数,比如表名,从而通用化。另外,第二个方法也可以变种为返回DataView、DataTable等。
      

  2.   

    我只知道在c#里我会在CreateDataSet里 return ds;
    然后在intitree里, path.datasource = new CreateDataSet().tree;