数据表为table,有三个字段分别为name,fuqin,daishu要在treeview中第一级中列出表table中daishu=0的所有
的name(字段),第二级中列出表中daishu=1的所有name(字段),以此类推。然后在点击daishu为0的name,在该级的下一级显示同级树形显示该daishu=1的下一代的name,而daishu为1的fuqin=======daishu为0的name,(下一代是上一代的亲生孩子才显示在同级树形下)
请问详细代码应怎样写??
例如这样的:
<asp:TreeView ID="TreeView1" runat="server">
<Nodes>
<asp:TreeNode Text="第0代" Value="第0代">
<asp:TreeNode Text="第1代" Value="第1代">
<asp:TreeNode Text="第2代" Value="第2代">
<asp:TreeNode Text="第3代" Value="第3代">
<asp:TreeNode Text="第4代" Value="第4代">
<asp:TreeNode Text="第5代" Value="第5代"></asp:TreeNode>
</asp:TreeNode>
</asp:TreeNode>
<asp:TreeNode Text="第3代" Value="第3代">
<asp:TreeNode Text="第4代" Value="第4代"></asp:TreeNode>
</asp:TreeNode>
</asp:TreeNode>
<asp:TreeNode Text="第2代" Value="第2代"></asp:TreeNode>
</asp:TreeNode>
<asp:TreeNode Text="第1代" Value="第1代">
<asp:TreeNode Text="第2代" Value="第2代">
<asp:TreeNode Text="第3代" Value="第3代">
<asp:TreeNode Text="第4代" Value="第4代"></asp:TreeNode>
</asp:TreeNode>
</asp:TreeNode>
</asp:TreeNode>
<asp:TreeNode Text="第1代" Value="第1代"></asp:TreeNode>
</asp:TreeNode>
</Nodes>
</asp:TreeView>
的name(字段),第二级中列出表中daishu=1的所有name(字段),以此类推。然后在点击daishu为0的name,在该级的下一级显示同级树形显示该daishu=1的下一代的name,而daishu为1的fuqin=======daishu为0的name,(下一代是上一代的亲生孩子才显示在同级树形下)
请问详细代码应怎样写??
例如这样的:
<asp:TreeView ID="TreeView1" runat="server">
<Nodes>
<asp:TreeNode Text="第0代" Value="第0代">
<asp:TreeNode Text="第1代" Value="第1代">
<asp:TreeNode Text="第2代" Value="第2代">
<asp:TreeNode Text="第3代" Value="第3代">
<asp:TreeNode Text="第4代" Value="第4代">
<asp:TreeNode Text="第5代" Value="第5代"></asp:TreeNode>
</asp:TreeNode>
</asp:TreeNode>
<asp:TreeNode Text="第3代" Value="第3代">
<asp:TreeNode Text="第4代" Value="第4代"></asp:TreeNode>
</asp:TreeNode>
</asp:TreeNode>
<asp:TreeNode Text="第2代" Value="第2代"></asp:TreeNode>
</asp:TreeNode>
<asp:TreeNode Text="第1代" Value="第1代">
<asp:TreeNode Text="第2代" Value="第2代">
<asp:TreeNode Text="第3代" Value="第3代">
<asp:TreeNode Text="第4代" Value="第4代"></asp:TreeNode>
</asp:TreeNode>
</asp:TreeNode>
</asp:TreeNode>
<asp:TreeNode Text="第1代" Value="第1代"></asp:TreeNode>
</asp:TreeNode>
</Nodes>
</asp:TreeView>
解决方案 »
- 怎样从GridView中取出TemplateField里面的值,如下:取出DropDownList的值?求高手解决。。。
- 使用UpdatePanel为什么保存不了视图状态 我设置了EnableViewState还是不行
- 存储过程取得时间的的问题
- SQL查询语句.经典问题
- 能否根据需要动态设置<asp:repeater>中某行数据字体的颜色
- 在.net中怎么实现一个当我点击左边的按钮时,右边显示相应的页面(不用跳转依然在本页实现)的一个框架。该怎么弄呢?
- DataSet 建立 relation 的問題!
- 新手求助 动态显示数据如图所示
- 考试通过,在线发布我的第一个作品,回复者至少有10分
- 返回记录集为空时的异常情况怎么处理?
- 门户网站---寻求基于LDAP的多系统统一用户管理解决方案
- fckeditor复制内容的问题。
DataRow[] dt0 = ds.Tables[0].Select("daishu='0'");
for (int i = 0; i < dt0.Length; i++)
{
TreeNode td0 = new TreeNode();
td0.Text = dt0[i]["name"].ToString();
td0.Value = dt0[i]["name"].ToString();
td0.NavigateUrl = "";
DataRow[] dt1 = ds.Tables["MyData"].Select("daishu='1' and name='" + dt0[i]["name"].ToString() + "'");
for (int j = 0; j < dt1.Length; j++)
{
TreeNode td1 = new TreeNode();
td1.Text = dt1[j]["name"].ToString();
td1.Value = dt1[j]["name"].ToString();
td1.NavigateUrl = "";
DataRow[] dt2 = ds.Tables["MyData"].Select("daishu='2' and name='" + dt1[j]["name"].ToString() + "'");
for (int z = 0; z < dt2.Length; z++)
{
TreeNode td2 = new TreeNode();
td2.Text = dt2[z]["name"].ToString();
td2.Value = dt2[z]["name"].ToString();
td2.NavigateUrl = "";
td1.ChildNodes.Add(td2);
///////////////以此类推////////////////////
}
td0.ChildNodes.Add(td1);
}
TreeView1.Nodes.Add(td0);
}
公司:id(int) company(varchar(50)部门:id(int) deid(int) department(varchar(50))班组:id(int) coid(int) class(varchar(50))
前台方法1:
DB DBManager = new DB();//实例化数据库操作类
string strConn = System.Configuration.ConfigurationManager.ConnectionStrings["rizhi"].ConnectionString;
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
//TreeView1.Attributes.Add("onclick", "OnTreeNodeChecked()");
TreeView1.Attributes.Add("onclick", "testClick(event);return true;");//单击文字,CheckBox=true TreeView1.ShowCheckBoxes = TreeNodeTypes.Leaf;//最后一级选中
TreeView1.ExpandDepth = 0;//不展开 using (SqlConnection conn = new SqlConnection(strConn))
{
DataSet ds_company = new DataSet();//实例化数据集(公司)
SqlDataAdapter sda_company = new SqlDataAdapter("select * from [company] where id<>"+0+" and id<>"+1001, conn);//实例化数据适配器(公司)
sda_company.Fill(ds_company, "company");//虚拟表填充到内存
for (int i = 0; i < ds_company.Tables["company"].Rows.Count; i++)//循环所有"公司"
{
TreeNode td_company = new TreeNode();//实例化公司节点
td_company.Text = ds_company.Tables["company"].Rows[i]["company"].ToString();//公司节点名称
TreeView1.Nodes.Add(td_company);//将公司节点添加至"树"
td_company.SelectAction = TreeNodeSelectAction.Expand; DataSet ds_department = new DataSet();//实例化数据集(部门)
SqlDataAdapter sda_department = new SqlDataAdapter("select * from [department] where [coid]=" + ds_company.Tables["company"].Rows[i]["id"]+" and department<>'全公司'" , conn);//实例化数据库适配器(部门)
sda_department.Fill(ds_department, "department");//虚拟表填充到内存
for (int j = 0; j < ds_department.Tables["department"].Rows.Count; j++)//循环 ds.Tables["department"].Rows[i]["id"] 对应的所有部门
{
TreeNode td_department = new TreeNode();//实例化部门节点
td_department.Text = ds_department.Tables["department"].Rows[j]["department"].ToString();//部门节点名称
td_company.ChildNodes.Add(td_department);//填充部门节点至"树"
td_department.SelectAction = TreeNodeSelectAction.Expand;//只允许展开 #region 如果人员属于某个班组
if (DBManager.getDs("select [info] from [user] where [pid]=" + ds_department.Tables["department"].Rows[j]["id"] + "", "is").Tables["is"].Rows.Count == 0)
{ DataSet ds_class = new DataSet();//实例化数据集(班组)
SqlDataAdapter sda_class = new SqlDataAdapter("select * from [class] where [deid]=" + ds_department.Tables["department"].Rows[j]["id"], conn);//实例化数据库适配器(班组)
sda_class.Fill(ds_class, "class");//虚拟表填充到内存
for (int z = 0; z < ds_class.Tables["class"].Rows.Count; z++)//循环 ds_department.Tables["class"].Rows[j]["id"] 对应的所有班组
{
TreeNode td_class = new TreeNode();//实例化班组节点
td_class.Text = ds_class.Tables["class"].Rows[z]["class"].ToString();//班组节点名称
td_department.ChildNodes.Add(td_class);//填充班组节点至"树"
td_class.SelectAction = TreeNodeSelectAction.Expand;//只允许展开 DataSet ds_user = new DataSet();//实例化数据集(人员)
SqlDataAdapter sda_user = new SqlDataAdapter("select [name] from [user] where [pid]=" + ds_class.Tables["class"].Rows[z]["id"] + "", conn);////实例化数据库适配器(人员)
sda_user.Fill(ds_user, "user");//虚拟表填充到内存
for (int k = 0; k < ds_user.Tables["user"].Rows.Count; k++)//循环 ds_department.Tables["user"].Rows[k]["name"] 对应的所有人员
{
TreeNode td_user = new TreeNode();//实例化班组节点
td_user.Text = ds_user.Tables["user"].Rows[k]["name"].ToString();//人员节点名称
td_class.ChildNodes.Add(td_user);//填充人员节点至"树"
td_user.NavigateUrl = "javascript:void(0)";//选中,但无效
}
}
}
#endregion #region 如果人员直接属于某个部门
else
{
DataSet ds_user = new DataSet();
SqlDataAdapter sda_user = new SqlDataAdapter("select [name] from [user] where [pid]=" + ds_department.Tables["department"].Rows[j]["id"] + "", conn);
sda_user.Fill(ds_user, "user");
for (int k = 0; k < ds_user.Tables["user"].Rows.Count; k++)
{
TreeNode td_user = new TreeNode();
td_user.Text = ds_user.Tables["user"].Rows[k]["name"].ToString();
td_department.ChildNodes.Add(td_user);
td_user.NavigateUrl = "javascript:void(0)";
}
}
#endregion
}
}
}
}
}
select 1 as id, '第0代' as name,0 as fuqin,0 as daishu
union all
select 2 as id, '第1代01' as name,1 as fuqin,1 as daishu
union all
select 3 as id, '第1代02' as name,1 as fuqin,1 as daishu
union all
select 4 as id, '第2代01' as name,2 as fuqin,2 as daishu
union all
select 5 as id, '第2代02' as name,2 as fuqin,2 as daishu
union all
select 6 as id, '第2代01' as name,3 as fuqin,2 as daishu
union all
select 7 as id, '第2代02' as name,3 as fuqin,2 as daishu
union all
select 8 as id, '第3代01' as name,7 as fuqin,3 as daishu
union all
select 9 as id, '第3代02' as name,7 as fuqin,3 as daishu二、代码
在页面上拉个TreeView控件,一按钮;
代码如下:
private const string conString = "Server=SZSOFT-SZZB\\SQLEXPRESS;database=office;uid=sa;pwd=;";
protected void btnBuild_Click(object sender, EventArgs e)
{
SqlConnection con = new SqlConnection();
con.ConnectionString = conString;
con.Open();
string sqlSelect = "Select * From table1";
SqlDataAdapter adapter = new SqlDataAdapter(sqlSelect, con);
DataTable dt = new DataTable();
adapter.Fill(dt); // 代数为0的纪录
DataRow[] drs = dt.Select("daishu=0"); TreeView1.Nodes.Clear();
foreach(DataRow dr in drs)
{
TreeNode node = new TreeNode(dr["name"].ToString());
node.Value = dr["name"].ToString();
// 创建下级节点
CreateSubNode(dt,Convert.ToInt32(dr["Id"]),node);
TreeView1.Nodes.Add(node);
} adapter.Dispose();
con.Close();
} /// <summary>
/// 创建子节点
/// </summary>
/// <param name="dt">世系表</param>
/// <param name="fuqin">父亲</param>
/// <param name="parentNode">父节点</param>
private void CreateSubNode(DataTable dt,int fuqin,TreeNode parentNode)
{
DataRow[] drs = dt.Select(string.Format("fuqin={0}",fuqin));
foreach(DataRow dr in drs)
{
TreeNode node = new TreeNode(dr["name"].ToString());
node.Value = dr["name"].ToString();
// 创建下级节点
CreateSubNode(dt,Convert.ToInt32(dr["Id"]),node);
parentNode.ChildNodes.Add(node);
}
}
参考