treeview的问题

virgo2008 2009-03-25 06:08:15
急需一个能删除、添加、移动、修改的四个功能目录树!不知道哪位大侠有源码!能不能贴出来啊!
...全文
121 22 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
22 条回复
切换为时间正序
请发表友善的回复…
发表回复
qthl004 2012-08-06
  • 打赏
  • 举报
回复
楼主说的是不是这个呢??

关键字:

ASP TreeView非常快速并且非常小(only 44 KB) 的.Net Treeview控件. 易于使用并且样式丰富,并且你还可以自己设置节点的HTML标签Basic版本(小于20个节点)免费!
此产品包含在产品集合 obout components Suite 中。

More Features:


From/To XML file
Populate from XML file with one line of code
Loading Web style
WhiteR style
XpBlue style
Gray style
TsMenu style
Open in Search pane
Find Selected Node
From Dennis
Checkboxes
How To add checkboxes
Select multiple nodes
Show File System
File System Loading
Edit nodes
Keyboard Navigation
Icons for treeview
Customize
How-To and Help

ASP TreeView Vista Theme


virgo2008 2009-03-26
  • 打赏
  • 举报
回复
呵呵!好的,谢谢啦,结贴送分!
homesos 2009-03-26
  • 打赏
  • 举报
回复
不难实现,网上例子很多。
与后台交互最好要使用ajax,否则编辑、删除、新增的时候,会造成页面重刷。
浪子-无悔 2009-03-26
  • 打赏
  • 举报
回复
都 是牛人~~~
virgo2008 2009-03-26
  • 打赏
  • 举报
回复
呵呵,我研究了咯!自己手写的,没有用控件,感觉自己又回到asp的手写时代了!HOHO!
virgo2008 2009-03-26
  • 打赏
  • 举报
回复
呵呵,我研究了咯!自己手写的,没有用空间,感觉自己又回到asp的手写时代了!HOHO!
Adechen 2009-03-25
  • 打赏
  • 举报
回复
有空研究一下
gui0605 2009-03-25
  • 打赏
  • 举报
回复
这个网上找找资料自己写就好了
w375893296 2009-03-25
  • 打赏
  • 举报
回复
[PlaceNo] [varchar](10) COLLATE Chinese_PRC_CI_AS NOT NULL,
[PlaceName] [varchar](50) COLLATE Chinese_PRC_CI_AS NULL,
[PlaceMemo] [varchar](100) COLLATE Chinese_PRC_CI_AS NULL,
[Contact] [varchar](200) COLLATE Chinese_PRC_CI_AS NULL,
[Phone] [varchar](15) COLLATE Chinese_PRC_CI_AS NULL,
[ParentPlaceId] [varchar](10) COLLATE Chinese_PRC_CI_AS NULL,




软件开发交流群 58773512 欢迎加入!!!!!
walkghost 2009-03-25
  • 打赏
  • 举报
回复
代码太长了。。。。
MD,只能输入8K个字符。
walkghost 2009-03-25
  • 打赏
  • 举报
回复
PS:
数据库结构啥的:


USE [psBankOfChina]
GO
/****** 对象: Table [dbo].[PlaceInfo] 脚本日期: 03/25/2009 19:28:27 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
SET ANSI_PADDING ON
GO
CREATE TABLE [dbo].[PlaceInfo](
[PlaceNo] [varchar](10) COLLATE Chinese_PRC_CI_AS NOT NULL,
[PlaceName] [varchar](50) COLLATE Chinese_PRC_CI_AS NULL,
[PlaceMemo] [varchar](100) COLLATE Chinese_PRC_CI_AS NULL,
[Contact] [varchar](200) COLLATE Chinese_PRC_CI_AS NULL,
[Phone] [varchar](15) COLLATE Chinese_PRC_CI_AS NULL,
[ParentPlaceId] [varchar](10) COLLATE Chinese_PRC_CI_AS NULL,
CONSTRAINT [PK_placeInfo] PRIMARY KEY CLUSTERED
(
[PlaceNo] ASC
) ON [PRIMARY]
) ON [PRIMARY]

GO
SET ANSI_PADDING OFF
GO

walkghost 2009-03-25
  • 打赏
  • 举报
回复
前台代码:


<%@ Page Language="C#" AutoEventWireup="true" CodeFile="deptree.aspx.cs" Inherits="deptree" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" >
<head id="Head1" runat="server">

<title>无标题页</title>
<%-- <link href="../Style/Basic.css" type="text/css" rel="stylesheet"/>--%>
</head>
<body alink="#0000ff" vlink="blue">
<form id="form1" runat="server">
<div>
<asp:ScriptManager id="ScriptManager1" runat="server">
</asp:ScriptManager>
<table cellpadding="0" cellspacing="0" width="100%" style=" border-color:#507CD1;">
<tr style="height:10px">
<td ></td>
</tr>
<tr>
<td background="images/admin_1bg.gif" style="height:35px;background-repeat: no-repeat">
            
<asp:Label ID="lbTop" runat="server" Width="100%" Font-Size="Small">机构管理</asp:Label> </td>
</tr>
<tr style="height:3px">
<td style="height: 3px" ></td>
</tr>

</table>

</div>
<div>
<asp:UpdatePanel id="UpdatePanel1" runat="server">
<contenttemplate>

<table style="width: 100%; height: 100%; border:1px; border-color: #507CD1; font-size:11pt;">
<tr>
<td style="width: 100%">
<table border="1" bordercolor="#507CD1" style="width: 100%; vertical-align: top; text-align: left; border:1px; border-color: #507CD1;">
<tr>
<td align="left" nowrap="nowrap" style="width:290px;">
 </td>
<td>
<asp:Button ID="edit" runat="server" Text="编辑" OnClick="edit_Click" />
<asp:Button ID="delete" runat="server" Text="删除" OnClick="delete_Click" />
<asp:Button ID="addnew" runat="server" Text="新建" OnClick="addnew_Click" /></td>
</tr>
<tr>
<td nowrap="nowrap" style="text-align: center; height: 20px;width:290px;">
机构列表</td>
<td style="text-align: left; height: 20px;">
机构详细资料<asp:Label ID="ParentPlaceIDInLabel" runat="server" Text="Label" Visible="False"></asp:Label></td>
</tr>
<tr style="width: 100%; vertical-align: top; text-align: left;">
<td align="left" nowrap="nowrap" style="height:368px; width:290px;">
<asp:TreeView ID="TreeView1" runat="server" OnSelectedNodeChanged="TreeView1_SelectedNodeChanged">
</asp:TreeView>
</td>
<td style="width: 100%; height: 238px;">
<asp:Panel ID="Panel1" runat="server" Height="50px" Width="125px">
<table border="1" bordercolor="#507cd1" style="width: 400px; ">
<tr>
<td style="height: 26px" >
机构编号:</td>
<td style="height: 26px" >
<asp:TextBox ID="placeno" runat="server" ReadOnly="True" Width="220px"></asp:TextBox></td>
</tr>
<tr>
<td >
机构名称:</td>
<td >
<asp:TextBox ID="placename" runat="server" MaxLength="25" Width="219px"></asp:TextBox></td>
</tr>
<tr>
<td >
机构地址:</td>
<td >
<asp:TextBox ID="memo" runat="server" MaxLength="50" Width="219px"></asp:TextBox></td>
</tr>
<tr>
<td style="height: 26px" >
联系人:</td>
<td style="height: 26px" >
<asp:TextBox ID="contact" runat="server" Width="220px"></asp:TextBox></td>
</tr>
<tr>
<td >
联系电话:</td>
<td >
<asp:TextBox ID="phone" runat="server" MaxLength="15" Width="219px"></asp:TextBox></td>
</tr>
<tr>
<td >
上级机构:</td>
<td >
<asp:TextBox ID="parentPlaceName" runat="server" ReadOnly="True" Width="218px"></asp:TextBox></td>
</tr>
<tr>
<td style="text-align: center" colspan="2" >
<asp:Button ID="ok" runat="server" Text="确定" OnClick="ok_Click" />
<asp:Button ID="cancle" runat="server" Text="取消" OnClick="cancle_Click" /></td>
</tr>
</table>
</asp:Panel>
<asp:HiddenField ID="Hoperate" runat="server" Value="begin" />
</td>
</tr>
</table>
</td>
</tr>
<tr>
<td style="width: 100%">
</td>
</tr>
<tr>
<td style="width: 100%; height: 21px;">
</td>
</tr>
</table>

</contenttemplate>
</asp:UpdatePanel>
</div>
</form>
</body>
</html>



walkghost 2009-03-25
  • 打赏
  • 举报
回复
接上贴:

protected void cancle_Click(object sender, EventArgs e)
{
TreeView1.Enabled = true;
delete.Enabled = true;
addnew.Enabled = true;
edit.Enabled = true;
Panel1.Enabled = false;
Hoperate.Value = "begin";//将操作命令回复到初始状态
}
protected void delete_Click(object sender, EventArgs e)
{
//如果用户没有选择节点,则出错误提示
if (placeno.Text == "")
{
ScriptManager.RegisterClientScriptBlock(UpdatePanel1, typeof(UpdatePanel), "CheckedBeforDelete", "alert('请选择一个机构再进行删除!');", true);
return;
}
//如果用户要删除下属机构非空的机构,则给出错误提示
if (TreeView1.SelectedNode.ChildNodes.Count != 0)
{
ScriptManager.RegisterClientScriptBlock(UpdatePanel1, typeof(UpdatePanel), "chkBeforDelParentNode", "alert('该机构有下属机构,请删除所有下属机构后再删除此机构!');", true);
return;
}
//操作命令设置为delete
Hoperate.Value = "delete";
//保存要删除的节点的placeno
ParentPlaceIDInLabel.Text = TreeView1.SelectedNode.Value.ToString();
//点“删除”的时候
TreeView1.Enabled = false;
delete.Enabled = false;
addnew.Enabled = false;
edit.Enabled = false;
Panel1.Enabled = true;
}
protected void addnew_Click(object sender, EventArgs e)
{
//如果用户没有选择节点,则出错误提示
if (placeno.Text == "")
{
ScriptManager.RegisterClientScriptBlock(UpdatePanel1, typeof(UpdatePanel), "CheckedBeforAdd", "alert('请选择要添加的机构的上级机构!');", true);
return;
}
//操作命令设置为:添加
//清空机构名称,机构编号、联系人、电话和地址:
placename.Text = "";
placeno.Text = "";
memo.Text = "";
phone.Text = "";
contact.Text = "";
parentPlaceName.Text = "";
//清空结束
//设置要添加节点的父节点为当前被选中的节点。
parentPlaceName.Text = TreeView1.SelectedNode.Text.ToString();
//设置要添加机构的机构编号和上级机构名称
string newid = "";//

//如果被选中节点无子节点,则直接把编号设置为该节点编号后加“01”,若有子节点,则取最大子节点编号,如果读取的编号的最后两位是'99',则报错。否则,把结果+1作为新节点的编号。
if (TreeView1.SelectedNode.ChildNodes.Count == 0)
{
placeno.Text = TreeView1.SelectedNode.Value.ToString() + "01";
}
//如果该节点有子节点,则从数据库中读取第一个空闲的机构编号
else
{
//获取空闲的第一个机构编号

int tmp = 0;
int tmp2 = 0;
string tmpstr = "", lastno = "";

SqlConnection getFreePNOCONN = new SqlConnection(ConfigurationManager.ConnectionStrings["iqmssup_bsConnectionString"].ConnectionString);
SqlCommand getFreePNOCMD = new SqlCommand("select placeno from placeinfo where parentplaceid ='" + TreeView1.SelectedNode.Value.ToString() + "' order by placeno asc", getFreePNOCONN);
getFreePNOCONN.Open();
SqlDataReader rdFreePNO = getFreePNOCMD.ExecuteReader();
while (rdFreePNO.Read())
{
tmpstr = rdFreePNO[0].ToString().Trim().Remove(0, TreeView1.SelectedNode.Value.ToString().Length);
tmp2 = int.Parse(tmpstr);
tmp++;
if (tmp != tmp2)
break;
}
rdFreePNO.Close();
getFreePNOCONN.Close();
if (tmp == 99)
{
ScriptManager.RegisterClientScriptBlock(UpdatePanel1, typeof(UpdatePanel), "MaxPlaceNoIsEndError", "alert('系统错误!\r机构编号已经超过最大值:“99”,\r请联系技术人员对数据库里的机构编号进行调整!');", true);
return;
}

if (tmp == tmp2)
tmp++;
lastno = tmp.ToString();
if (tmp < 10)
lastno = "0" + tmp.ToString();
//获取空闲的第一个机构编号结束
placeno.Text = TreeView1.SelectedNode.Value.ToString() + lastno;

}//end of else

ParentPlaceIDInLabel.Text = TreeView1.SelectedNode.Value.ToString();

//检查placeno的合法性
if (placeno.Text.ToString().Trim() == "" || ParentPlaceIDInLabel.Text.ToString().Trim()=="" || (!(placeno.Text.ToString().Trim().StartsWith(TreeView1.SelectedNode.Value.ToString()))))
{
ScriptManager.RegisterClientScriptBlock(UpdatePanel1, typeof(UpdatePanel), "PlacenoErrorBeforAdd", "alert('机构编号错误,请返回重新添加!');", true);
return;
}

//点“新建”的时候
TreeView1.Enabled = false;
delete.Enabled = false;
addnew.Enabled = false;
edit.Enabled = false;
Panel1.Enabled = true;
Hoperate.Value = "add";

}
}



walkghost 2009-03-25
  • 打赏
  • 举报
回复
接上贴

protected void edit_Click(object sender, EventArgs e)
{
if (placeno.Text == "")
{

ScriptManager.RegisterClientScriptBlock(UpdatePanel1, typeof(UpdatePanel), "PLSChecked", "alert('请选择一个机构再进行编辑!');", true);
return;
}
//点“编辑”的时候
TreeView1.Enabled = false;
delete.Enabled = false;
addnew.Enabled = false;
edit.Enabled = false;
Panel1.Enabled = true;
Hoperate.Value = "edit";//告诉ok按钮:要进行的是编辑操作
}

protected void ok_Click(object sender, EventArgs e)
{


//定义变量,用来执行数据库操作
SqlConnection execconn = new SqlConnection(ConfigurationManager.ConnectionStrings["iqmsSup_BSConnectionString"].ConnectionString.ToString());
string execcmdtxt = "";
//根据Hoperate.Value判断要进行何种操作

if (Hoperate.Value == "add")
{
//执行添加操作

//已经在客户端检查用户输入的合法性
//检查机构名称是否为空
if (placename.Text.ToString().Trim() == "")
{
ScriptManager.RegisterClientScriptBlock(UpdatePanel1, typeof(UpdatePanel), "CheckPName", "alert('请填写机构名称!');", true);
Panel1.Enabled = true;//如果不加这一句,则弹出提示之后就各个控件都不可用
return;
}
else
execcmdtxt = "insert into placeinfo (placeno,placename,placememo,contact,phone,parentplaceid) values ('" + placeno.Text.ToString().Trim() + "','" + placename.Text.ToString().Trim() + "','" + memo.Text.ToString().Trim() + "','" + contact.Text.ToString().Trim() + "','" + phone.Text.ToString().Trim() + "','" +ParentPlaceIDInLabel.Text.ToString()+ "')";


}//执行添加操作结束
else
if (Hoperate.Value == "edit")
{
//执行编辑操作
//如果机构名称为空,则给出错误提示
if (placename.Text.ToString() == "")
{
ScriptManager.RegisterClientScriptBlock(UpdatePanel1, typeof(UpdatePanel), "CheckPNameBeforEdit", "alert('请填写机构名称!');", true);
Panel1.Enabled = true;//如果不加这一句,则弹出提示之后就各个控件都不可用
return;
}
else
execcmdtxt = "update placeinfo set placename='" + placename.Text.ToString().Trim() + "',placememo='" + memo.Text.ToString().Trim() + "',contact='" + contact.Text.ToString().Trim() + "',phone='"+phone.Text.ToString().Trim()+"' where placeno='"+placeno.Text.ToString()+"'";


} //执行编辑操作结束
else
if (Hoperate.Value == "delete")
{
//执行删除操作
execcmdtxt = "delete from placeinfo where placeno='"+ParentPlaceIDInLabel.Text.ToString()+"'";
}//执行删除操作结束
else
{
//如果既不是“新建”也不是“修改”也不是“删除”的话,则报错
ScriptManager.RegisterClientScriptBlock(UpdatePanel1, typeof(UpdatePanel), "OperateError", "alert('系统错误!');", true);
return;
}

//执行数据库操作
if (execcmdtxt == "")
{
ParentPlaceIDInLabel.Text = "";//清空临时label的值
return;
}
else
{
try
{
execconn.Open();
SqlCommand execcmd = new SqlCommand(execcmdtxt, execconn);
execcmd.ExecuteNonQuery();
}
catch (Exception ex2)
{
throw new Exception(ex2.Message + "%SQLtxt" + execcmdtxt + "%UserName" + Session["UserID"].ToString());
}
finally
{
execconn.Close();
CommonExecute.MakeLog(Session["UserID"].ToString(), execcmdtxt, Hoperate.Value);//添加日志记录
ParentPlaceIDInLabel.Text = "";//清空临时label的值
}
}
//给出操作成功提示
ScriptManager.RegisterClientScriptBlock(UpdatePanel1, typeof(UpdatePanel), "execSucess", "alert('操作成功!');", true);
//设置各控件的可用性
TreeView1.Enabled = true;
delete.Enabled = true;
addnew.Enabled = true;
edit.Enabled = true;
Panel1.Enabled = false;

Hoperate.Value = "begin";//将操作命令回复到初始状态
//刷新树
SqlConnection conn2 = new SqlConnection(ConfigurationManager.ConnectionStrings["iqmssup_bsConnectionString"].ToString());
SqlCommand cmd2 = new SqlCommand("select placeno,placename,parentplaceid from placeinfo where placeno like '" + Session["UserNamePlaceIDLike"].ToString() + "'", conn2);
SqlDataAdapter sad = new SqlDataAdapter(cmd2);
ds.Clear();//清空dataset
sad.Fill(ds);//填充dataset
TreeView1.Nodes.Clear();//清空树结构
AddNode(Session["UserNameParentPlaceID"].ToString(), (TreeNode)null, TreeView1);
TreeView1.ExpandAll();//展开所有的节点

//清空机构名称,机构编号、联系人、电话和地址:
placename.Text = "";
placeno.Text = "";
memo.Text = "";
phone.Text = "";
contact.Text = "";
parentPlaceName.Text = "";
//清空结束

}

walkghost 2009-03-25
  • 打赏
  • 举报
回复
接上贴。


protected void TreeView1_SelectedNodeChanged(object sender, EventArgs e)
{
placeno.Text = "";
placename.Text = "";
memo.Text = "";
contact.Text = "";
phone.Text = "";
parentPlaceName.Text = "";
//填充数据
SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["iqmssup_bsConnectionString"].ToString());
SqlCommand cmd = new SqlCommand("select * from placeinfo where placeno='" + TreeView1.SelectedNode.Value.ToString() + "'", conn);
try
{
conn.Open();
SqlDataReader rdPlaceInfo = cmd.ExecuteReader();
while (rdPlaceInfo.Read())
{
placeno.Text = rdPlaceInfo["placeno"].ToString();
placename.Text = rdPlaceInfo["placename"].ToString();
memo.Text = rdPlaceInfo["placememo"].ToString();
contact.Text = rdPlaceInfo["contact"].ToString();
phone.Text = rdPlaceInfo["phone"].ToString();
}
}
catch (Exception e2)
{
throw new Exception(e2.Message + "%SQLtxt" + cmd.CommandText + "%UserName" + Session["UserID"].ToString());
}
finally
{
conn.Close();
}
SqlCommand cmd2 = new SqlCommand("select placename from placeinfo where placeno = (select parentplaceid from placeinfo where placeno='" + TreeView1.SelectedNode.Value.ToString() + "')", conn);
try
{
conn.Open();
SqlDataReader rdparentplaccename = cmd2.ExecuteReader();
while (rdparentplaccename.Read())
{
if (rdparentplaccename["placename"] == null)
{

return;
}
else
{
parentPlaceName.Text = rdparentplaccename["placename"].ToString();
}
}

}
catch (Exception e2)
{
throw new Exception(e2.Message + "%SQLtxt" + cmd2.CommandText + "%UserName" + Session["UserID"].ToString());
}
finally
{
conn.Close();
}
}



walkghost 2009-03-25
  • 打赏
  • 举报
回复
机构管理(树形结构)不知道是不是你所说的那样。这里有新建,编辑和删除功能。
后台代码:

using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.Data.SqlClient;

public partial class deptree : System.Web.UI.Page
{
DataSet ds = new DataSet();
protected void Page_Load(object sender, EventArgs e)
{

if (Session["UserName"] == null || Session["LogState"] == null)
{
Response.Redirect("error.aspx?id=1");
}
//如果用户不是机构管理员,则不能进行此项操作
if (Session["UserTYpe"].ToString() != "2")
Response.Redirect("error.aspx?id=3");

SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["iqmssup_bsConnectionString"].ToString());
SqlCommand cmd = new SqlCommand("select placeno,placename,parentplaceid from placeinfo where placeno like '" + Session["UserNamePlaceIDLike"].ToString() + "'", conn);
SqlDataAdapter sad = new SqlDataAdapter(cmd);
sad.Fill(ds);
if (!IsPostBack)
{
AddNode(Session["UserNameParentPlaceID"].ToString(), (TreeNode)null, TreeView1);//应将此处的父节点编号替换为用户所在机构的上级机构的编号
}

Panel1.Enabled = false;
}


protected void AddNode(string ParentKey, TreeNode pNode, TreeView myTreeView)
{

DataView dvTree = new DataView(ds.Tables[0]);
dvTree.RowFilter = "[ParentplaceID] = " + ParentKey; //过滤ParentID,得到所有子节点
foreach (DataRowView Row in dvTree)
{
TreeNode Node = new TreeNode();
if (pNode == null)
{
Node.Text = Row["placeName"].ToString().Trim();
myTreeView.Nodes.Add(Node);
//Node.Expanded = true;
Node.Value = Row["placeno"].ToString().Trim();
Node.SelectAction = TreeNodeSelectAction.Select;
AddNode(Row["placeno"].ToString(), Node, myTreeView); //递归调用生成节点
}
else
{
Node.Text = Row["placename"].ToString().Trim();
pNode.ChildNodes.Add(Node);
Node.Expanded = true;
Node.Value = Row["placeno"].ToString().Trim();
Node.SelectAction = TreeNodeSelectAction.Select;
AddNode(Row["placeno"].ToString(), Node, myTreeView); //递归生成节点
}
}
}

shashashu 2009-03-25
  • 打赏
  • 举报
回复
我做的是用了GridView控件来添加,删除,修改等等,然后这些数据都是保存在数据库中的,然后从数据库中调用数据来显示模型树。
TreeViewM.Nodes[0].ChildNodes[0].ChildNodes.Add(chtn);
这是添加时的关键代码
walkghost 2009-03-25
  • 打赏
  • 举报
回复
添加修改删除应该不难吧?
指间的风 2009-03-25
  • 打赏
  • 举报
回复
你这个4个功能加到那里啊,如何操作这些功能啊。
加载更多回复(2)

62,242

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧