程序源码如下:
protected void AddChildNode(TreeNode parentNode, int level)
{
try
{
int _currentLevel = level + 1;
DataView _dataView;
_dataView = _dataSet.Tables[0].DefaultView; if (_currentLevel <= 1)
{
_dataView.RowFilter = "Level = " + _currentLevel.ToString();
}
else
{
_dataView.RowFilter = "Level = " + _currentLevel.ToString() + " AND UpSubjectID = '" + parentNode.Value + "'";
} foreach (DataRowView _dataRowView in _dataView)
{
TreeNode _childNode = new TreeNode();
_childNode.Text = _dataRowView["SubjectName"].ToString();
_childNode.Value = _dataRowView["SubjectID"].ToString();
parentNode.ChildNodes.Add(_childNode);
AddChildNode(_childNode, _currentLevel);
}
}
catch (Exception ex)
{
Response.Write(ex.Message);
ErrorManager.DoException(ex, this);
}
}环境:vs2005 + win2003 sp1问题如下:
此函数是一个递归函数,每次递归是都要使用一个dataView筛选条件
但我通过跟踪发现,dataView每次都是引用,即一个副本。
如第一次递归时,dataView的行数量为10,进入下层递归得到行数量5,但递归完毕返回上层时,dataView的行数量并不是10,而是5请各位朋友解答一下呢,到底是为什么?? 多谢。。
protected void AddChildNode(TreeNode parentNode, int level)
{
try
{
int _currentLevel = level + 1;
DataView _dataView;
_dataView = _dataSet.Tables[0].DefaultView; if (_currentLevel <= 1)
{
_dataView.RowFilter = "Level = " + _currentLevel.ToString();
}
else
{
_dataView.RowFilter = "Level = " + _currentLevel.ToString() + " AND UpSubjectID = '" + parentNode.Value + "'";
} foreach (DataRowView _dataRowView in _dataView)
{
TreeNode _childNode = new TreeNode();
_childNode.Text = _dataRowView["SubjectName"].ToString();
_childNode.Value = _dataRowView["SubjectID"].ToString();
parentNode.ChildNodes.Add(_childNode);
AddChildNode(_childNode, _currentLevel);
}
}
catch (Exception ex)
{
Response.Write(ex.Message);
ErrorManager.DoException(ex, this);
}
}环境:vs2005 + win2003 sp1问题如下:
此函数是一个递归函数,每次递归是都要使用一个dataView筛选条件
但我通过跟踪发现,dataView每次都是引用,即一个副本。
如第一次递归时,dataView的行数量为10,进入下层递归得到行数量5,但递归完毕返回上层时,dataView的行数量并不是10,而是5请各位朋友解答一下呢,到底是为什么?? 多谢。。
int _currentLevel = level + 1;
DataView _dataView;
_dataView = _dataSet.Tables[0].DefaultView;_dataView.RowStateFilter=DataViewRowState.OriginalRows ;//加的……