字段:
当数据这样时,程序正常
cId  cName  cPreId  
1    瓜     0
2    西瓜   1当数据这样时,程序出错
cId  cName  cPreId  
1    瓜     0
2    菜     0上面“0”代码表示根代码如下:public void AddTree(int ParentId,Microsoft.Web.UI.WebControls.TreeNodeCollection pNode)
{
DataView dv=ds.Tables["movieClass"].DefaultView;
dv.RowFilter="[cPreId]="+ParentId; foreach(DataRowView row in dv)
{
TreeNode node=new TreeNode();
node.Text=row["cName"].ToString(); 报“在位置 1 处没有任何行。”错误,这个应该怎么解决
pNode.Add(node);
AddTree(int.Parse(row["cId"].ToString()),pNode[pNode.Count-1].Nodes);
}
}

解决方案 »

  1.   

    DataSet ds = (DataSet)this.ViewState["ds"];
    DataView dv = new DataView(ds.Tables["tree_Ta"]);
    dv.RowFilter = "[parentid] = " + parentId;因为这里是递归,所以要加DataSet ds = (DataSet)this.ViewState["ds"];
    否则数据会丢失。所以就没有数据了。加下就ok了!
      

  2.   

    或者在dv.RowFilter="[cPreId]="+ParentId;前面加上:
    dv.RowFilter="";
      

  3.   

    看不出来递归跟ViewState有什么关系
    递归就递归好了,也是处理完成之后才发到客户端的
    不可能处理一次发送一次,所以不用使用ViewState来保存数据
      

  4.   

    DataSet ds = (DataSet)this.ViewState["ds"];
    不能解决问题但是我在递归函数内加了下面方法就可以了,为什么会这样,要重新建立DataSet对象才行吗?
    //获取数据
    public void getData()
    {
    DataBase db=new DataBase();
    db.RunProc("showNode",out ds,"movieClass");
    }
      

  5.   

    为什么我把
    DataView dv=ds.Tables["movieClass"].DefaultView;
    改成
    DataView dv=new DataView(ds.Tables["movieClass"]);也能正常呢?是不是原句中dv对象只是对“movieClass”表视图的引用
      

  6.   

    楼主可以试试
    icyer
    的方法
    本质是一样的
      

  7.   

    搂住:我这里怎么没有TreeNode 控件啊?在 添加/移出项 中没有找到这个东东,是不是我缺了什么东西?怎么才让它有啊?
      

  8.   

    为什么我把
    DataView dv=ds.Tables["movieClass"].DefaultView;
    改成
    DataView dv=new DataView(ds.Tables["movieClass"]);也能正常呢?是不是原句中dv对象只是对“movieClass”表视图的引用