怎么实现省市区树形菜单!打酱油的也来看看嘛! 本帖最后由 xzwms2010 于 2010-07-22 13:48:54 编辑 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 http://topic.csdn.net/u/20071016/10/c9e3c486-87f9-40a0-8d33-627448be6b28.html类似、解决了的帖子 那个是下拉列表形式的 我要Tree形式的! 没能过啊!我百度的都是下拉列表的 !我想要Tree三级的! 我们公司有个Tree控件,多级都可以的 treeview递归绑定数据先绑定Province根据PIF查询cityprivate void InitTree(TreeNodeCollection Nds,string parentId){DataView dv=new DataView();TreeNode tmpNd;string intId;dv.Table=ds.Tables["tree"];dv.RowFilter="ParentId='" + parentId + "'" ;foreach(DataRowView drv in dv){tmpNd=new TreeNode();tmpNd.Tag=drv["NodeId"].ToString();tmpNd.Text=drv["NodeName"].ToString();Nds.Add(tmpNd);intId=drv["ParentId"].ToString();InitTree(tmpNd.Nodes,tmpNd.Tag.ToString());}} 你用微软提供的TreeView不行吗? 我只会一个比较笨的方法。。 private void Bind() { //这里先获取所有省的信息 DataSet ds = bll.getUnitid(); //调用创建方法创建TreeView的根节点 CreateTreeView(TreeView1.Nodes, ds); } private void CreateTreeView(TreeNodeCollection nodes, DataSet ds) { //从Dataset中筛选符合条件的行的集合 DataRow[] drr = ds.Tables[0].Select(); //遍历获得行的集合 foreach (DataRow dr in drr) { //创建TreeView节点 TreeNode tnode = new TreeNode(); //添加到根节点中 nodes.Add(tnode); //设置显示的文本 //tnode.ImageUrl = "images/foldericon1.gif"; tnode.Text = dr["unit"].ToString(); tnode.Value = dr["id"].ToString(); //设置显示的路径 // tnode.NavigateUrl = dr["PurURL"].ToString(); //本来是递归调用方法,不过由于你的数据不是由一个字段来区分级数,所以得重新查询市的所有信息 // CreateTreeView(tnode.ChildNodes, ds); DataSet ds1 = bll.getdepartment(); CreateTreeViewCnode(tnode.ChildNodes, ds1, dr["id"].ToString()); //从Dataset中删除已经添加的行,提高访问效率 ds.Tables[0].Rows.Remove(dr); } } private void CreateTreeViewCnode(TreeNodeCollection nodes, DataSet ds, string unitid) { //定义筛选条件 string sql = string.Format("unit_id={0}", unitid); //从Dataset中筛选符合条件的行的集合 DataRow[] drr = ds.Tables[0].Select(sql); //遍历获得行的集合 foreach (DataRow dr in drr) { //创建TreeView节点 TreeNode tnode = new TreeNode(); //添加到根节点中 nodes.Add(tnode); //设置显示的文本 //tnode.ImageUrl = "images/foldericon1.gif"; tnode.Text = dr["depart"].ToString(); tnode.Value = dr["id"].ToString(); //设置显示的路径 // tnode.NavigateUrl = dr["PurURL"].ToString(); //递归调用方法 DataSet ds1 = bll.getFirstdate(); CreateTreeViewCnodePolicedate(tnode.ChildNodes, ds1, dr["id"].ToString()); //从Dataset中删除已经添加的行,提高访问效率 ds.Tables[0].Rows.Remove(dr); } } private void CreateTreeViewCnodePolicedate(TreeNodeCollection nodes, DataSet ds, string departid) { //定义筛选条件 string sql = string.Format("depart_id='{0}'", departid); //从Dataset中筛选符合条件的行的集合 DataRow[] drr = ds.Tables[0].Select(sql); //遍历获得行的集合 foreach (DataRow dr in drr) { //创建TreeView节点 TreeNode tnode = new TreeNode(); //添加到根节点中 nodes.Add(tnode); //设置显示的文本 //tnode.ImageUrl = "images/foldericon1.gif"; string firstTime = Convert.ToDateTime(dr["firstdate"]).Year.ToString(); tnode.Text = firstTime + "着装"; tnode.Value = dr["firstdate"].ToString(); //设置显示的路径 // tnode.NavigateUrl = dr["PurURL"].ToString(); DataSet ds1 = bll.getPoliceinfo(); CreateTreeViewCnodePolice(tnode.ChildNodes, ds1, dr["firstdate"].ToString()); //从Dataset中删除已经添加的行,提高访问效率 ds.Tables[0].Rows.Remove(dr); } } private void CreateTreeViewCnodePolice(TreeNodeCollection nodes, DataSet ds, string firstdate) { //定义筛选条件 string sql = string.Format("firstdate='{0}'", firstdate); //从Dataset中筛选符合条件的行的集合 DataRow[] drr = ds.Tables[0].Select(sql); //遍历获得行的集合 foreach (DataRow dr in drr) { //创建TreeView节点 TreeNode tnode = new TreeNode(); //添加到根节点中 nodes.Add(tnode); //设置显示的文本 //tnode.ImageUrl = "images/foldericon1.gif"; tnode.Text = dr["name"].ToString(); tnode.Value = dr["police_id"].ToString(); //设置显示的路径 // tnode.NavigateUrl = dr["PurURL"].ToString(); //递归调用方法 //从Dataset中删除已经添加的行,提高访问效率 ds.Tables[0].Rows.Remove(dr); } } 我上面发的弄复杂了,用这个可以:首先先查出所有的省,保存在dataset中。然后:/// <summary> /// 创建DataSet的方法 /// </summary> /// <param name="nodes">TreeView的根节点</param> /// <param name="ds">Dataset数据集合</param> /// <param name="pid">节点的父</param> private void CreateTreeView(TreeNodeCollection nodes, DataSet ds, int pid) { //定义筛选条件 string sql = string.Format("ParentID={0}", pid); //从Dataset中筛选符合条件的行的集合 DataRow[] drr = ds.Tables[0].Select(sql); //遍历获得行的集合 foreach (DataRow dr in drr) { //创建TreeView节点 TreeNode tnode = new TreeNode(); //添加到根节点中 nodes.Add(tnode); //设置显示的文本 //tnode.ImageUrl = "images/foldericon1.gif"; tnode.Text = dr["PurName"].ToString(); tnode.Value = dr["PurID"].ToString(); //设置显示的路径 tnode.NavigateUrl = dr["PurURL"].ToString(); //递归调用方法 CreateTreeView(tnode.ChildNodes, ds, Convert.ToInt32(dr["PurID"])); //从Dataset中删除已经添加的行,提高访问效率 ds.Tables[0].Rows.Remove(dr); } } http://topic.csdn.net/u/20090619/16/98091f21-2a6f-4079-a1a2-e223c49b0495.html?16212 就用一个表就可以搞定的吧。 id,pid,name(最简单的无限级,pid为父id号) private void TreeViewBind() { string sql_tr = "select id,pid,name from Tab"; SqlConnection mySqlConn = new SqlConnection(sqlConn); SqlDataAdapter myDataAdapter = new SqlDataAdapter(sql_tr, mySqlConn); mySqlConn.Open(); myDataAdapter.Fill(ds_tr, "tree_show"); DataView dv = ds_tr.Tables[0].DefaultView; dv.RowFilter = "pid=0"; TreeView1.ShowCheckBoxes = TreeNodeTypes.None; //不显示checkbox foreach (DataRowView drv in dv) { TreeNode node = new TreeNode(); node.Text = drv["name"].ToString(); node.Value = drv["id"].ToString(); node.Expanded = false; TreeView1.Nodes.Add(node); addnode(dv, node); } } /// 递归绑定子节点 private void addnode(DataView dv, TreeNode node) { dv.RowFilter = "pid='" + node.Value + "'"; foreach (DataRowView row in dv) { TreeNode replyNode = new TreeNode(); replyNode.Text = row["name"].ToString(); replyNode.Value = row["id"].ToString(); replyNode.Expanded = false; node.ChildNodes.Add(replyNode); addnode(dv, replyNode); } }以上是绑定TreeView代码 加载页面的时候动态绑定省,点击省的时候用ajax动态加载市,再依次类推。前段时间我做了一个类似的 效果显示方法 求救》。。。 求教 设置焦点选中文本 问题 谁有C#编的内部聊天模块,本人有急用! 关于同一网站目录下的session共享问题 如何获取经过重写的url,而不是原始url? asp.net 关于CS后台调用前台JS的问题? vs2005 发布网站目标目录为空 如何使文本框中的文字垂直居中对齐. treeview控件使用的问题,图片怎么点几下就不在了. 为什么decimal类型的变量为空操作时,存到数据库里面显示出来的时候总是“0”? 语法错误找不出错在哪里? Application_BeginRequest 中怎么中断当前请求。
类似、解决了的帖子
没能过啊!我百度的都是下拉列表的 !我想要Tree三级的!
先绑定Province根据PIF查询city
private void InitTree(TreeNodeCollection Nds,string parentId)
{
DataView dv=new DataView();
TreeNode tmpNd;
string intId;
dv.Table=ds.Tables["tree"];
dv.RowFilter="ParentId='" + parentId + "'" ;
foreach(DataRowView drv in dv)
{
tmpNd=new TreeNode();
tmpNd.Tag=drv["NodeId"].ToString();
tmpNd.Text=drv["NodeName"].ToString();
Nds.Add(tmpNd);
intId=drv["ParentId"].ToString();
InitTree(tmpNd.Nodes,tmpNd.Tag.ToString());
}
}
private void Bind()
{
//这里先获取所有省的信息
DataSet ds = bll.getUnitid();
//调用创建方法创建TreeView的根节点
CreateTreeView(TreeView1.Nodes, ds); }
private void CreateTreeView(TreeNodeCollection nodes, DataSet ds)
{
//从Dataset中筛选符合条件的行的集合
DataRow[] drr = ds.Tables[0].Select(); //遍历获得行的集合
foreach (DataRow dr in drr)
{
//创建TreeView节点
TreeNode tnode = new TreeNode();
//添加到根节点中
nodes.Add(tnode);
//设置显示的文本
//tnode.ImageUrl = "images/foldericon1.gif";
tnode.Text = dr["unit"].ToString();
tnode.Value = dr["id"].ToString();
//设置显示的路径
// tnode.NavigateUrl = dr["PurURL"].ToString(); //本来是递归调用方法,不过由于你的数据不是由一个字段来区分级数,所以得重新查询市的所有信息
// CreateTreeView(tnode.ChildNodes, ds);
DataSet ds1 = bll.getdepartment();
CreateTreeViewCnode(tnode.ChildNodes, ds1, dr["id"].ToString());
//从Dataset中删除已经添加的行,提高访问效率
ds.Tables[0].Rows.Remove(dr); } }
private void CreateTreeViewCnode(TreeNodeCollection nodes, DataSet ds, string unitid)
{
//定义筛选条件
string sql = string.Format("unit_id={0}", unitid);
//从Dataset中筛选符合条件的行的集合
DataRow[] drr = ds.Tables[0].Select(sql); //遍历获得行的集合
foreach (DataRow dr in drr)
{
//创建TreeView节点
TreeNode tnode = new TreeNode();
//添加到根节点中
nodes.Add(tnode);
//设置显示的文本
//tnode.ImageUrl = "images/foldericon1.gif";
tnode.Text = dr["depart"].ToString();
tnode.Value = dr["id"].ToString();
//设置显示的路径
// tnode.NavigateUrl = dr["PurURL"].ToString();
//递归调用方法
DataSet ds1 = bll.getFirstdate();
CreateTreeViewCnodePolicedate(tnode.ChildNodes, ds1, dr["id"].ToString());
//从Dataset中删除已经添加的行,提高访问效率
ds.Tables[0].Rows.Remove(dr);
} }
private void CreateTreeViewCnodePolicedate(TreeNodeCollection nodes, DataSet ds, string departid)
{
//定义筛选条件
string sql = string.Format("depart_id='{0}'", departid);
//从Dataset中筛选符合条件的行的集合
DataRow[] drr = ds.Tables[0].Select(sql); //遍历获得行的集合
foreach (DataRow dr in drr)
{
//创建TreeView节点
TreeNode tnode = new TreeNode();
//添加到根节点中
nodes.Add(tnode);
//设置显示的文本
//tnode.ImageUrl = "images/foldericon1.gif";
string firstTime = Convert.ToDateTime(dr["firstdate"]).Year.ToString();
tnode.Text = firstTime + "着装";
tnode.Value = dr["firstdate"].ToString();
//设置显示的路径
// tnode.NavigateUrl = dr["PurURL"].ToString();
DataSet ds1 = bll.getPoliceinfo();
CreateTreeViewCnodePolice(tnode.ChildNodes, ds1, dr["firstdate"].ToString());
//从Dataset中删除已经添加的行,提高访问效率
ds.Tables[0].Rows.Remove(dr);
} }
private void CreateTreeViewCnodePolice(TreeNodeCollection nodes, DataSet ds, string firstdate)
{
//定义筛选条件
string sql = string.Format("firstdate='{0}'", firstdate);
//从Dataset中筛选符合条件的行的集合
DataRow[] drr = ds.Tables[0].Select(sql); //遍历获得行的集合
foreach (DataRow dr in drr)
{
//创建TreeView节点
TreeNode tnode = new TreeNode();
//添加到根节点中
nodes.Add(tnode);
//设置显示的文本
//tnode.ImageUrl = "images/foldericon1.gif";
tnode.Text = dr["name"].ToString();
tnode.Value = dr["police_id"].ToString();
//设置显示的路径
// tnode.NavigateUrl = dr["PurURL"].ToString();
//递归调用方法 //从Dataset中删除已经添加的行,提高访问效率
ds.Tables[0].Rows.Remove(dr);
} }
首先先查出所有的省,保存在dataset中。
然后:
/// <summary>
/// 创建DataSet的方法
/// </summary>
/// <param name="nodes">TreeView的根节点</param>
/// <param name="ds">Dataset数据集合</param>
/// <param name="pid">节点的父</param>
private void CreateTreeView(TreeNodeCollection nodes, DataSet ds, int pid)
{
//定义筛选条件
string sql = string.Format("ParentID={0}", pid); //从Dataset中筛选符合条件的行的集合
DataRow[] drr = ds.Tables[0].Select(sql); //遍历获得行的集合
foreach (DataRow dr in drr)
{
//创建TreeView节点
TreeNode tnode = new TreeNode();
//添加到根节点中
nodes.Add(tnode);
//设置显示的文本
//tnode.ImageUrl = "images/foldericon1.gif";
tnode.Text = dr["PurName"].ToString();
tnode.Value = dr["PurID"].ToString();
//设置显示的路径
tnode.NavigateUrl = dr["PurURL"].ToString();
//递归调用方法
CreateTreeView(tnode.ChildNodes, ds, Convert.ToInt32(dr["PurID"]));
//从Dataset中删除已经添加的行,提高访问效率
ds.Tables[0].Rows.Remove(dr); }
}
private void TreeViewBind()
{
string sql_tr = "select id,pid,name from Tab";
SqlConnection mySqlConn = new SqlConnection(sqlConn);
SqlDataAdapter myDataAdapter = new SqlDataAdapter(sql_tr, mySqlConn);
mySqlConn.Open();
myDataAdapter.Fill(ds_tr, "tree_show");
DataView dv = ds_tr.Tables[0].DefaultView;
dv.RowFilter = "pid=0";
TreeView1.ShowCheckBoxes = TreeNodeTypes.None; //不显示checkbox
foreach (DataRowView drv in dv)
{
TreeNode node = new TreeNode();
node.Text = drv["name"].ToString();
node.Value = drv["id"].ToString();
node.Expanded = false;
TreeView1.Nodes.Add(node);
addnode(dv, node);
}
} /// 递归绑定子节点 private void addnode(DataView dv, TreeNode node)
{
dv.RowFilter = "pid='" + node.Value + "'";
foreach (DataRowView row in dv)
{
TreeNode replyNode = new TreeNode();
replyNode.Text = row["name"].ToString();
replyNode.Value = row["id"].ToString();
replyNode.Expanded = false;
node.ChildNodes.Add(replyNode);
addnode(dv, replyNode);
}
}以上是绑定TreeView代码
前段时间我做了一个类似的