private void TreeNodeBind(DataView _DataView,string ParentId,TreeNode _TreeNode)
{
_DataView.RowFilter = " substring(exid,1,len('"+ParentId+"')) = '"+ParentId+"' and len(exid) = "+(ParentId.Length +3);
foreach(DataRowView DRV in _DataView)
{
if(DRV != null)
{
TreeNode temp = new TreeNode();
// temp.Text = DRV[1].ToString().Trim()+"("+DRV[2].ToString().Trim()+")"; temp.Text = DRV.Row[1].ToString().Trim();
temp.ID = DRV.Row[0].ToString().Trim();
_TreeNode.Nodes.Add(temp); TreeNodeBind(_DataView,temp.ID,temp);
}
   
}
}以上代码,我要是把注释的去掉就会报错,报错信息为
在位置 1 处没有任何行。 
说明: 执行当前 Web 请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。 异常详细信息: System.IndexOutOfRangeException: 在位置 1 处没有任何行。
temp.Text = DRV[1].ToString().Trim()+"("+DRV[2].ToString().Trim()+")"; temp.Text = DRV.Row[1].ToString().Trim();这两个写法到底有什么区别,忘高手指点 ,谢谢 !!!

解决方案 »

  1.   

    没有什么区别,可能是你在编辑行后没有调用EndEdit方法.
      

  2.   

    hbxtlhx(平民百姓-自已动手,丰衣足食) ( ) 信誉:112 
    我也认为是没有区别的,这个地方只是一个循环,没有涉及到编辑操作的temp.Text = DRV[1].ToString().Trim()+"("+DRV[2].ToString().Trim()+")";temp.Text = DRV.Row[1].ToString().Trim();这两条语句,第一句报错,第二句就OK  。Why ??
      

  3.   

    Why?
    你在使用它DataView前有没有对DataView或它的DataTable进行了编辑而没有调用EndEdit()?
      

  4.   

    hbxtlhx(平民百姓-自已动手,丰衣足食) ( ) 信誉:112 
    我没有编辑的,我直接从数据库取出的数据,赋给的DataSet中的一个DataTable,然后使用TreeNodeBind 这个方法来循环,这个方法也就是循环创建一个TreeView的树