日期:2014-05-20  浏览次数:20835 次

关于设置TreeView数据源代码的问题
下面是设置TreeView数据的代码,现在想改为通过控件(DataSet,BindingSource,TableAdapter)调资料,即不用getDataset,应怎么更改代码,特别是dv.Table   =   dsDept.Tables[ "dept "]这行,我老在这行出错。如果哪位网友有更好的方法希望能贴出来。
dsDept   =   getDataset();
setTreeData(tvTree.Nodes,   "0 ");//从根开始

private   DataSet   getDataset()
{
string   strSelect   =   "SELECT   [AutoID],[deptID],[deptName]   ,[parentID]   "   +
"FROM   [erpdata].[dbo].[   Department] ";
SqlConnection   sqlcon   =   new   SqlConnection(SqlConntionString);
DataSet   ds   =   new   DataSet();
SqlDataAdapter   da   =   new   SqlDataAdapter(strSelect,   sqlcon);
da.Fill(ds,   "Dept ");
return   ds;
}

private   void   setTreeData(TreeNodeCollection   Nds,   string   pId)
{
DataView   dv   =   new   DataView();
TreeNode   tmpNd;
string   intId;
dv.Table   =   dsDept.Tables[ "dept "];
dv.RowFilter   =   "deptID= ' "   +   pId   +   " ' ";
foreach   (DataRowView   drv   in   dv)
{
tmpNd   =   new   TreeNode();
intId   =   drv[ "deptID "].ToString();
tmpNd.Name   =   intId;
tmpNd.Text   =   drv[ "deptName "].ToString();
Nds.Add(tmpNd);
setTreeData   (tmpNd.Nodes,   intId);
}
}


------解决方案--------------------
//利用Nodes.Find()寻找父节点
//参考如下代码

private void button1_Click(object sender, EventArgs e)
{
OleDbConnection vOleDbConnection = new OleDbConnection(
"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\\Temp\\temp.mdb ");
string vSqlCommandText = "select * from tree ";
vOleDbConnection.Open();
OleDbCommand vOleDbCommand = new OleDbCommand(vSqlCommandText, vOleDbConnection);
OleDbDataReader vOleDbDataReader = vOleDbCommand.ExecuteReader();
while (vOleDbDataReader.Read())
{
TreeNode[] vParentNodes =
treeView1.Nodes.Find(vOleDbDataReader.GetString(2), true);
if (vParentNodes.Length > 0)
vParentNodes[0].Nodes.Add(vOleDbDataReader.GetString(1),
vOleDbDataReader.GetString(1));
else treeView1.Nodes.Add(vOleDbDataReader.GetString(1),
vOleDbDataReader.GetString(1));
}
}