问题如下:树状数据结构A课程(id:1)(parentid:0)
单元一(id:3)(parentid:1)
课程一(id:5)(parentid:3)
课程二(id:6)(parentid:3)
单元二(id:4)(parentid:1)
课程三(id:9)(parentid:4)
B课程(id:2)(parentid:0)
单元一(id:7)(parentid:2)
单元二(id:8)(parentid:2)比如我想通过id=1可以得到它下面各级的数据,id=3得到它下面各级的数据等等,不知道怎么做,请各位指教,在线等
单元一(id:3)(parentid:1)
课程一(id:5)(parentid:3)
课程二(id:6)(parentid:3)
单元二(id:4)(parentid:1)
课程三(id:9)(parentid:4)
B课程(id:2)(parentid:0)
单元一(id:7)(parentid:2)
单元二(id:8)(parentid:2)比如我想通过id=1可以得到它下面各级的数据,id=3得到它下面各级的数据等等,不知道怎么做,请各位指教,在线等
DataSet dsdata=new DataSet();
private void button3_Click(object sender, EventArgs e)
{
string con = "server=localhost;Integrated Security=SSPI;database=Common";
string sqlstr = "Select ORGUNITID,SHORTNAME,isnull(ORGUNITPARENT,0) ORGUNITPARENT from OrganizationUnit ";
SqlConnection connect = new SqlConnection(con);
SqlCommand cmd = new SqlCommand();
cmd.CommandText = sqlstr;
cmd.Connection = connect;
SqlDataAdapter dap = new SqlDataAdapter();
dap.SelectCommand = cmd;
dap.Fill(dsdata);
CreatTreeView2(0);
} private void CreatTreeView2(int parentid)
{
string strFilter = "ORGUNITPARENT= " + parentid.ToString().Trim(); DataRow[] drs = dsdata.Tables[0].Select(strFilter); foreach (DataRow dr in drs)
{
TreeNode tmnode = new TreeNode(dr["SHORTNAME"].ToString().Trim());
this.treeView1.Nodes.Add(tmnode);
CreatTreeView2(tmnode, Convert.ToInt32(dr["ORGUNITID"]));
}
} private void CreatTreeView2(TreeNode parentNode,int parentid)
{
DataRow[] drs = dsdata.Tables[0].Select("ORGUNITPARENT= " + parentid.ToString().Trim()); foreach (DataRow dr in drs)
{
TreeNode tmnode = new TreeNode(dr["SHORTNAME"].ToString().Trim());
parentNode.Nodes.Add(tmnode);
CreatTreeView2(tmnode, Convert.ToInt32(dr["ORGUNITID"]));
}
}
SHORTNAME, ==> 课程/单元..
ORGUNITPARENT ==> parentid
private void getData(int ParentID)
{
DataSet dsTemp=....
if (dsTemp.Tables[0].Rows.Count<=0)
{
return;
}
ds.Merge(dsTemp);
foreach (DataRow row in dsTemp.Tables[0].Rows)
{
//获取子一级的数据
getData(int.Parse(row["ID"].ToString()));
}
}
所有的数据都在DS里,自已调试一下
比如,当参数id=1时,效果如下:
------------------------
单元一 2级
单元二 2级
课程一 3级
课程二 3级
课程三 3级
如果在sql中的话,可以写一个存储过程,递归筛选出来返回数据集就可以了。看这里有一个类似的例子,是在存储过程中处理的,你可以参考一下。
http://www.cnblogs.com/sxlfybb/archive/2007/12/07/986848.html
试一下.
DataSet dsdata = new DataSet(); private void CreatTreeView3(int parentid)
{
string strFilter = "ORGUNITPARENT= " + parentid.ToString().Trim(); DataRow[] drs = dsdata.Tables[0].Select(strFilter); foreach (DataRow dr in drs)
{
string nodename = dr["SHORTNAME"].ToString().Trim() + " " + dr["ORGUNITID"].ToString() + "级";
TreeNode tmnode = new TreeNode(nodename);
this.treeView1.Nodes.Add(tmnode);
} foreach (DataRow dr in drs)
{
CreatTreeView2(Convert.ToInt32(dr["ORGUNITID"]));
}
} private void button4_Click(object sender, EventArgs e)
{
string con = "server=localhost;Integrated Security=SSPI;database=Common";
string sqlstr = "Select ORGUNITID,SHORTNAME,isnull(ORGUNITPARENT,0) ORGUNITPARENT from OrganizationUnit ";
SqlConnection connect = new SqlConnection(con);
SqlCommand cmd = new SqlCommand();
cmd.CommandText = sqlstr;
cmd.Connection = connect;
SqlDataAdapter dap = new SqlDataAdapter();
dap.SelectCommand = cmd;
dap.Fill(dsdata);
CreatTreeView3(1);
}
改一下. DataSet dsdata = new DataSet(); private void CreatTreeView3(int parentid)
{
string strFilter = "ORGUNITPARENT= " + parentid.ToString().Trim(); DataRow[] drs = dsdata.Tables[0].Select(strFilter); foreach (DataRow dr in drs)
{
string nodename = dr["SHORTNAME"].ToString().Trim() + " " + dr["ORGUNITID"].ToString() + "级";
TreeNode tmnode = new TreeNode(nodename);
this.treeView1.Nodes.Add(tmnode);
} foreach (DataRow dr in drs)
{
CreatTreeView3(Convert.ToInt32(dr["ORGUNITID"]));
}
} private void button4_Click(object sender, EventArgs e)
{
string con = "server=localhost;Integrated Security=SSPI;database=Common";
string sqlstr = "Select ORGUNITID,SHORTNAME,isnull(ORGUNITPARENT,0) ORGUNITPARENT from OrganizationUnit ";
SqlConnection connect = new SqlConnection(con);
SqlCommand cmd = new SqlCommand();
cmd.CommandText = sqlstr;
cmd.Connection = connect;
SqlDataAdapter dap = new SqlDataAdapter();
dap.SelectCommand = cmd;
dap.Fill(dsdata);
CreatTreeView3(1);
}
string nodename = dr["SHORTNAME"].ToString().Trim() + " " + dr["ORGUNITID"].ToString() + "级";改为string nodename = dr["SHORTNAME"].ToString().Trim() + " " + parentid.ToString() + "级";
0_0