11 个解决方案
#1
一个表就可以了。可以分配编码 每两位一个级别
例如上海市 00
下面的 区1 0001
区 2 0002
加载树的时候 根节点为Len(编码长度)='2'
用程序递归加载 每次都是上级编码 +2 即 Len(编码长度)=父节点编码长度+2 and 编码 like "父节点编码%"
例如上海市 00
下面的 区1 0001
区 2 0002
加载树的时候 根节点为Len(编码长度)='2'
用程序递归加载 每次都是上级编码 +2 即 Len(编码长度)=父节点编码长度+2 and 编码 like "父节点编码%"
#2
不太明白,能说清楚点吗?
#3
三个表,操作、插入数据、维护起来方便。
select * from 市表;select * from 区表,select * from 镇表
这样查询出来的一个DataSet里边就有3个表.然后你给DataSet加上关系。叫做DataRealation,相当于数据库的
外键连接。这样ds.Table["市表"].Rows[0].GetChilds(DataRealation),得到的就是全部的对应区表记录!
这样两层foreach循环就可以遍历楼主需要的三级树了。
类似代码:
http://topic.csdn.net/u/20100115/09/10829fe1-62b0-4796-8261-8161c3291487.html
select * from 市表;select * from 区表,select * from 镇表
这样查询出来的一个DataSet里边就有3个表.然后你给DataSet加上关系。叫做DataRealation,相当于数据库的
外键连接。这样ds.Table["市表"].Rows[0].GetChilds(DataRealation),得到的就是全部的对应区表记录!
这样两层foreach循环就可以遍历楼主需要的三级树了。
类似代码:
http://topic.csdn.net/u/20100115/09/10829fe1-62b0-4796-8261-8161c3291487.html
#4
对,我是要实现三级树,请教了
#5
两个循环就好了吧
#6
一个表实现(区划ID,区划名称,上级区划ID),无限级树,默认第一级的上级区划ID为0或null
1.查找第一级区划
List<区划信息> 一级区划列表= 区划业务层.GetList("上级区划ID = 0");
foreach(var 区划信息 in 一级区划列表){
TreeNode node = new TreeNode(区划信息.区划名称,区划信息.区划ID)
迭代区划(node,区划信息.区划ID)
TreeView.Nodes.Add(node);
}
void 迭代区划(TreeNode parentNode,上级区划Id){
List<区划信息> 下级区划列表= 区划业务层.GetList(string.Format("上级区划ID = {0}",上级区划Id);
foreach(var 区划信息 in 下级区划列表){
TreeNode node = new TreeNode(区划信息.区划名称,区划信息.区划ID)
迭代区划(node,区划信息.区划ID)
parentNode.ChildNodes.Add(node);
}
}
1.查找第一级区划
List<区划信息> 一级区划列表= 区划业务层.GetList("上级区划ID = 0");
foreach(var 区划信息 in 一级区划列表){
TreeNode node = new TreeNode(区划信息.区划名称,区划信息.区划ID)
迭代区划(node,区划信息.区划ID)
TreeView.Nodes.Add(node);
}
void 迭代区划(TreeNode parentNode,上级区划Id){
List<区划信息> 下级区划列表= 区划业务层.GetList(string.Format("上级区划ID = {0}",上级区划Id);
foreach(var 区划信息 in 下级区划列表){
TreeNode node = new TreeNode(区划信息.区划名称,区划信息.区划ID)
迭代区划(node,区划信息.区划ID)
parentNode.ChildNodes.Add(node);
}
}
#7
jfzr
#8
if(!IsPostBack)
{
BindJG();
}
private void BindJG()
{
DataSet ds = new DataSet();
//获取数据
DataTable dtb = ds.Tables[0];
TreeNode root = new TreeNode();
root.Value = "0";
root.Text = "";
root.ImageUrl = "../images/folder.gif";
root.Expanded = true;
this.TreeView1.Nodes.Add(root);
initTree(dtb, "", root);
this.TreeView1.ExpandAll();
}
protected void initTree(DataTable dt, string nFatherid, TreeNode fatherNode)
{
DataView dv = new DataView(dt);
if (nFatherid == "")
dv.RowFilter = "depth='1'";
else
dv.RowFilter = "ParentId='"+nFatherid+"'";
foreach (DataRowView Row in dv)
{
TreeNode node = new TreeNode();
if (fatherNode.Value == "0")
{
node.Value = Row["BH"].ToString();
node.Text = Row["mc"].ToString();
node.NavigateUrl = "";
node.ImageUrl = "../images/folder.gif";
fatherNode.ChildNodes.Add(node);
initTree(dt, Row["BH"].ToString(), node);
}
else
{
node.Text = Row["mc"].ToString();
node.Value = Row["BH"].ToString();
node.ImageUrl = "../images/jg.gif";
fatherNode.ChildNodes.Add(node);
}
}
}
{
BindJG();
}
private void BindJG()
{
DataSet ds = new DataSet();
//获取数据
DataTable dtb = ds.Tables[0];
TreeNode root = new TreeNode();
root.Value = "0";
root.Text = "";
root.ImageUrl = "../images/folder.gif";
root.Expanded = true;
this.TreeView1.Nodes.Add(root);
initTree(dtb, "", root);
this.TreeView1.ExpandAll();
}
protected void initTree(DataTable dt, string nFatherid, TreeNode fatherNode)
{
DataView dv = new DataView(dt);
if (nFatherid == "")
dv.RowFilter = "depth='1'";
else
dv.RowFilter = "ParentId='"+nFatherid+"'";
foreach (DataRowView Row in dv)
{
TreeNode node = new TreeNode();
if (fatherNode.Value == "0")
{
node.Value = Row["BH"].ToString();
node.Text = Row["mc"].ToString();
node.NavigateUrl = "";
node.ImageUrl = "../images/folder.gif";
fatherNode.ChildNodes.Add(node);
initTree(dt, Row["BH"].ToString(), node);
}
else
{
node.Text = Row["mc"].ToString();
node.Value = Row["BH"].ToString();
node.ImageUrl = "../images/jg.gif";
fatherNode.ChildNodes.Add(node);
}
}
}
#9
类似代码:
获取数据集
private DataSet GetTableInfo()
{
DataTable table1 = ProjectBLL.GetProjectInfo(); //查询所有工程信息
table1.TableName = "pro";
string str_sql = "select * from Table_GaugeDate";
string str_sql1 = "select * from Table_GuageDateTime";
查询所有测期信息
DataTable table2 = Unlity.OledbHelper.ExecuteDataTable(Unlity.OledbHelper.str_connectionString, CommandType.Text, str_sql, null);
table2.TableName = "gua";
查询所有的观测日期信息
DataTable table3 = Unlity.OledbHelper.ExecuteDataTable(Unlity.OledbHelper.str_connectionString, CommandType.Text, str_sql1, null);
table3.TableName = "gut";
DataSet ds = new DataSet();
ds.Tables.Add(table1.Copy());
ds.Tables.Add(table2.Copy());
ds.Tables.Add(table3.Copy());
//添加关系
//MessageBox.Show("" + ds.Tables.Count);
DataRelation dr = new DataRelation("ProjectGuaageDate", ds.Tables["pro"].Columns["Table_Project_Id"], ds.Tables["gua"].Columns["Table_Project_Id"], false);
ds.Relations.Add(dr);
//DataColumn[] dc = new DataColumn[2] { ds.Tables["gua"].Columns["Table_Project_Id"], ds.Tables["gua"].Columns["Table_GaugeDate_Id"] };
//DataColumn[] dc1 = new DataColumn[2] { ds.Tables["gut"].Columns["Table_Project_Id"], ds.Tables["gut"].Columns["Table_GaugeDate_Id"] };
DataRelation dr1 = new DataRelation("GuageDateGuageDateTime", ds.Tables["gua"].Columns["Table_GaugeDate_Id"], ds.Tables["gut"].Columns["Table_GaugeDate_Id"], false);
ds.Relations.Add(dr1);
return ds;
}
/// <summary>
/// 绑定数据
/// </summary>
public void TreeView()
{
tv1.Nodes.Clear();
DataSet ds = GetTableInfo();
TreeNode pro_node, gua_node, gut_node;
for (int i = 0; i < ds.Tables["pro"].Rows.Count; i++) //获取所有的工程行数
{
pro_node = new TreeNode();
pro_node.Text = ds.Tables["pro"].Rows[i].ItemArray["工程名"].ToString();
pro_node.Tag = ds.Tables["pro"].Rows[i].ItemArray["工程编号"].ToString();
tv1.Nodes.Add(pro_node);
//获取工程对应的测期信息
DataRow[] drGuage = ds.Tables["pro"].Rows[i].GetChildRows("ProjectGuaageDate");
for (int j = 0; j < drGuage.Length; j++)
{
gua_node = new TreeNode();
if (Convert.ToString(drGuage[j].ItemArray[0]) == "")
{
break;
}
gua_node.Text = drGuage[j].ItemArray["期数"].ToString();
gua_node.Tag = drGuage[j].ItemArray["编号"].ToString();
pro_node.Nodes.Add(gua_node);
//获取测期对应的观测日期信息
DataRow[] drGuagt = ds.Tables["gua"].Rows[j].GetChildRows("GuageDateGuageDateTime");
for (int s = 0; s < drGuagt.Length; s++)
{
gut_node = new TreeNode();
if (Convert.ToString(drGuagt[s].ItemArray[0]) == "")
{
break;
}
gut_node.Text = drGuagt[s].ItemArray["观测日期"].ToString()
gut_node.Tag = drGuagt[s].ItemArray["编号"].ToString();
gua_node.Nodes.Add(gut_node);
}
}
tv1.SelectedNode = tv1.Nodes[0]; //窗体加载时默认选择第一个节点
}
}
这段代码是我改进后的代码,写的不好还请见谅。
如果我有这样的数据
工程:
编号:30,31
名称:测试工程,测试工程2
测期:
编号:1,2,3
期数:第一期,第二期,第一期
所属工程:测试工程,测试工程,测试工程2
观测日期:
编号:a1,a2,a3
期数:1,2,3
日期:2010-1-15,2010-1-16,2010-1-17
想实现的效果:
测试工程
第一期
2010-1-15
第二期
2010-1-16
测试工程2
第一期
2010-1-17
#10
^:^
#11
不太明白这个代码~可否给解说一下?
#1
一个表就可以了。可以分配编码 每两位一个级别
例如上海市 00
下面的 区1 0001
区 2 0002
加载树的时候 根节点为Len(编码长度)='2'
用程序递归加载 每次都是上级编码 +2 即 Len(编码长度)=父节点编码长度+2 and 编码 like "父节点编码%"
例如上海市 00
下面的 区1 0001
区 2 0002
加载树的时候 根节点为Len(编码长度)='2'
用程序递归加载 每次都是上级编码 +2 即 Len(编码长度)=父节点编码长度+2 and 编码 like "父节点编码%"
#2
不太明白,能说清楚点吗?
#3
三个表,操作、插入数据、维护起来方便。
select * from 市表;select * from 区表,select * from 镇表
这样查询出来的一个DataSet里边就有3个表.然后你给DataSet加上关系。叫做DataRealation,相当于数据库的
外键连接。这样ds.Table["市表"].Rows[0].GetChilds(DataRealation),得到的就是全部的对应区表记录!
这样两层foreach循环就可以遍历楼主需要的三级树了。
类似代码:
http://topic.csdn.net/u/20100115/09/10829fe1-62b0-4796-8261-8161c3291487.html
select * from 市表;select * from 区表,select * from 镇表
这样查询出来的一个DataSet里边就有3个表.然后你给DataSet加上关系。叫做DataRealation,相当于数据库的
外键连接。这样ds.Table["市表"].Rows[0].GetChilds(DataRealation),得到的就是全部的对应区表记录!
这样两层foreach循环就可以遍历楼主需要的三级树了。
类似代码:
http://topic.csdn.net/u/20100115/09/10829fe1-62b0-4796-8261-8161c3291487.html
#4
对,我是要实现三级树,请教了
#5
两个循环就好了吧
#6
一个表实现(区划ID,区划名称,上级区划ID),无限级树,默认第一级的上级区划ID为0或null
1.查找第一级区划
List<区划信息> 一级区划列表= 区划业务层.GetList("上级区划ID = 0");
foreach(var 区划信息 in 一级区划列表){
TreeNode node = new TreeNode(区划信息.区划名称,区划信息.区划ID)
迭代区划(node,区划信息.区划ID)
TreeView.Nodes.Add(node);
}
void 迭代区划(TreeNode parentNode,上级区划Id){
List<区划信息> 下级区划列表= 区划业务层.GetList(string.Format("上级区划ID = {0}",上级区划Id);
foreach(var 区划信息 in 下级区划列表){
TreeNode node = new TreeNode(区划信息.区划名称,区划信息.区划ID)
迭代区划(node,区划信息.区划ID)
parentNode.ChildNodes.Add(node);
}
}
1.查找第一级区划
List<区划信息> 一级区划列表= 区划业务层.GetList("上级区划ID = 0");
foreach(var 区划信息 in 一级区划列表){
TreeNode node = new TreeNode(区划信息.区划名称,区划信息.区划ID)
迭代区划(node,区划信息.区划ID)
TreeView.Nodes.Add(node);
}
void 迭代区划(TreeNode parentNode,上级区划Id){
List<区划信息> 下级区划列表= 区划业务层.GetList(string.Format("上级区划ID = {0}",上级区划Id);
foreach(var 区划信息 in 下级区划列表){
TreeNode node = new TreeNode(区划信息.区划名称,区划信息.区划ID)
迭代区划(node,区划信息.区划ID)
parentNode.ChildNodes.Add(node);
}
}
#7
jfzr
#8
if(!IsPostBack)
{
BindJG();
}
private void BindJG()
{
DataSet ds = new DataSet();
//获取数据
DataTable dtb = ds.Tables[0];
TreeNode root = new TreeNode();
root.Value = "0";
root.Text = "";
root.ImageUrl = "../images/folder.gif";
root.Expanded = true;
this.TreeView1.Nodes.Add(root);
initTree(dtb, "", root);
this.TreeView1.ExpandAll();
}
protected void initTree(DataTable dt, string nFatherid, TreeNode fatherNode)
{
DataView dv = new DataView(dt);
if (nFatherid == "")
dv.RowFilter = "depth='1'";
else
dv.RowFilter = "ParentId='"+nFatherid+"'";
foreach (DataRowView Row in dv)
{
TreeNode node = new TreeNode();
if (fatherNode.Value == "0")
{
node.Value = Row["BH"].ToString();
node.Text = Row["mc"].ToString();
node.NavigateUrl = "";
node.ImageUrl = "../images/folder.gif";
fatherNode.ChildNodes.Add(node);
initTree(dt, Row["BH"].ToString(), node);
}
else
{
node.Text = Row["mc"].ToString();
node.Value = Row["BH"].ToString();
node.ImageUrl = "../images/jg.gif";
fatherNode.ChildNodes.Add(node);
}
}
}
{
BindJG();
}
private void BindJG()
{
DataSet ds = new DataSet();
//获取数据
DataTable dtb = ds.Tables[0];
TreeNode root = new TreeNode();
root.Value = "0";
root.Text = "";
root.ImageUrl = "../images/folder.gif";
root.Expanded = true;
this.TreeView1.Nodes.Add(root);
initTree(dtb, "", root);
this.TreeView1.ExpandAll();
}
protected void initTree(DataTable dt, string nFatherid, TreeNode fatherNode)
{
DataView dv = new DataView(dt);
if (nFatherid == "")
dv.RowFilter = "depth='1'";
else
dv.RowFilter = "ParentId='"+nFatherid+"'";
foreach (DataRowView Row in dv)
{
TreeNode node = new TreeNode();
if (fatherNode.Value == "0")
{
node.Value = Row["BH"].ToString();
node.Text = Row["mc"].ToString();
node.NavigateUrl = "";
node.ImageUrl = "../images/folder.gif";
fatherNode.ChildNodes.Add(node);
initTree(dt, Row["BH"].ToString(), node);
}
else
{
node.Text = Row["mc"].ToString();
node.Value = Row["BH"].ToString();
node.ImageUrl = "../images/jg.gif";
fatherNode.ChildNodes.Add(node);
}
}
}
#9
类似代码:
获取数据集
private DataSet GetTableInfo()
{
DataTable table1 = ProjectBLL.GetProjectInfo(); //查询所有工程信息
table1.TableName = "pro";
string str_sql = "select * from Table_GaugeDate";
string str_sql1 = "select * from Table_GuageDateTime";
查询所有测期信息
DataTable table2 = Unlity.OledbHelper.ExecuteDataTable(Unlity.OledbHelper.str_connectionString, CommandType.Text, str_sql, null);
table2.TableName = "gua";
查询所有的观测日期信息
DataTable table3 = Unlity.OledbHelper.ExecuteDataTable(Unlity.OledbHelper.str_connectionString, CommandType.Text, str_sql1, null);
table3.TableName = "gut";
DataSet ds = new DataSet();
ds.Tables.Add(table1.Copy());
ds.Tables.Add(table2.Copy());
ds.Tables.Add(table3.Copy());
//添加关系
//MessageBox.Show("" + ds.Tables.Count);
DataRelation dr = new DataRelation("ProjectGuaageDate", ds.Tables["pro"].Columns["Table_Project_Id"], ds.Tables["gua"].Columns["Table_Project_Id"], false);
ds.Relations.Add(dr);
//DataColumn[] dc = new DataColumn[2] { ds.Tables["gua"].Columns["Table_Project_Id"], ds.Tables["gua"].Columns["Table_GaugeDate_Id"] };
//DataColumn[] dc1 = new DataColumn[2] { ds.Tables["gut"].Columns["Table_Project_Id"], ds.Tables["gut"].Columns["Table_GaugeDate_Id"] };
DataRelation dr1 = new DataRelation("GuageDateGuageDateTime", ds.Tables["gua"].Columns["Table_GaugeDate_Id"], ds.Tables["gut"].Columns["Table_GaugeDate_Id"], false);
ds.Relations.Add(dr1);
return ds;
}
/// <summary>
/// 绑定数据
/// </summary>
public void TreeView()
{
tv1.Nodes.Clear();
DataSet ds = GetTableInfo();
TreeNode pro_node, gua_node, gut_node;
for (int i = 0; i < ds.Tables["pro"].Rows.Count; i++) //获取所有的工程行数
{
pro_node = new TreeNode();
pro_node.Text = ds.Tables["pro"].Rows[i].ItemArray["工程名"].ToString();
pro_node.Tag = ds.Tables["pro"].Rows[i].ItemArray["工程编号"].ToString();
tv1.Nodes.Add(pro_node);
//获取工程对应的测期信息
DataRow[] drGuage = ds.Tables["pro"].Rows[i].GetChildRows("ProjectGuaageDate");
for (int j = 0; j < drGuage.Length; j++)
{
gua_node = new TreeNode();
if (Convert.ToString(drGuage[j].ItemArray[0]) == "")
{
break;
}
gua_node.Text = drGuage[j].ItemArray["期数"].ToString();
gua_node.Tag = drGuage[j].ItemArray["编号"].ToString();
pro_node.Nodes.Add(gua_node);
//获取测期对应的观测日期信息
DataRow[] drGuagt = ds.Tables["gua"].Rows[j].GetChildRows("GuageDateGuageDateTime");
for (int s = 0; s < drGuagt.Length; s++)
{
gut_node = new TreeNode();
if (Convert.ToString(drGuagt[s].ItemArray[0]) == "")
{
break;
}
gut_node.Text = drGuagt[s].ItemArray["观测日期"].ToString()
gut_node.Tag = drGuagt[s].ItemArray["编号"].ToString();
gua_node.Nodes.Add(gut_node);
}
}
tv1.SelectedNode = tv1.Nodes[0]; //窗体加载时默认选择第一个节点
}
}
这段代码是我改进后的代码,写的不好还请见谅。
如果我有这样的数据
工程:
编号:30,31
名称:测试工程,测试工程2
测期:
编号:1,2,3
期数:第一期,第二期,第一期
所属工程:测试工程,测试工程,测试工程2
观测日期:
编号:a1,a2,a3
期数:1,2,3
日期:2010-1-15,2010-1-16,2010-1-17
想实现的效果:
测试工程
第一期
2010-1-15
第二期
2010-1-16
测试工程2
第一期
2010-1-17
#10
^:^
#11
不太明白这个代码~可否给解说一下?