表结构
父ID INT
子ID INT
部门编号 varchar(20)
部门名称 varchar(30)
我想用部门结构表中数据在表示层用树结构来显示
在asp.net 2.0不知道怎么写
方法最好不要是msdn中在 TreeView 控件中显示分层数据
请大家帮忙
谢谢
父ID INT
子ID INT
部门编号 varchar(20)
部门名称 varchar(30)
我想用部门结构表中数据在表示层用树结构来显示
在asp.net 2.0不知道怎么写
方法最好不要是msdn中在 TreeView 控件中显示分层数据
请大家帮忙
谢谢
解决方案 »
- 菜鸟问问题
- vs 2003 Winform ,dataGrid改变行颜色
- 网站发布后不正常?
- @@IDENTITY 与ExecuteScalar问题
- 求 DATAGRID一个带有 分页功能并能多行编辑,多行删除的(编辑与删除可跨页进行)
- 在IE浏览器中使用的Windows窗体控件为什么不能含有Grid
- 重开个帖子,再问如何点击DataGrid中某一行时触发一个事件!!!!
- Repeater控件 取路径后怎么才可以输出到前台,(数据库中 读取图片的路径)
- 我现在想读取下面这句sql语句中的prepare_flag这个值,但是不知道下面的代码该如何写,麻烦高手帮个忙,帮我写一下
- 各位大神,麻烦进来看看,急需你们的帮忙
- 我的 DropDownList1为什么绑定不了数据????
- 打算做一个XML论坛,不知道性能会不会更优与MSSQL呢?
你搜索一下treeview有很多的
http://www.microsoft.com/china/community/Column/30.mspx
谁能给个2005 treeview 例子吗
<head runat="server">
<title>Untitled Page</title>
<script language="javascript">
function chkAll()
{
var chkall= document.all["chkall"];
var chkother= document.getElementsByTagName("input");
for (var i=0;i<chkother.length;i++)
{
if( chkother[i].type=='checkbox')
{
if(chkother[i].id.indexOf('TreeView1')>-1)
{
if(chkall.checked==true)
{
chkother[i].checked=true;
}
else
{
chkother[i].checked=false;
}
}
}
}
}
</script>
</head>
<body>
<form id="form1" runat="server">
<table width="100%" height="100%">
<tr height="10">
<td><input id="chkall" type="checkbox" onclick="chkAll();" />全选/取消</td>
</tr>
</table> </form>
</body>
</html>//cs********************************
protected void Page_Load(object sender, EventArgs e)
{
if (!Page.IsPostBack)
{
//BindTree();
InitTree();
//this.TreeView1.Attributes.Add("ondragstart", "nodeclick();");
this.TreeView1.Attributes.Add("onclick", "return tree_oncheck(this);");
}
} #region 主从表绑定
private void BindTree()
{
DataSet dst = GetTreeViewData();
TreeView1.ShowCheckBoxes = TreeNodeTypes.All;
foreach (DataRow masterRow in dst.Tables["province"].Rows)
{
TreeNode masterNode = new TreeNode((string)masterRow["province"]);
TreeView1.Nodes.Add(masterNode);
foreach (DataRow childRow in masterRow.GetChildRows("Children"))
{
TreeNode childNode =new TreeNode((string)childRow["city"]);
masterNode.Expanded = false;
masterNode.ChildNodes.Add(childNode);
}
}
} private DataSet GetTreeViewData()
{
string constring = System.Configuration.ConfigurationSettings.AppSettings["ConnectionString"];
SqlConnection con = new SqlConnection(constring);
SqlDataAdapter daprovince = new SqlDataAdapter("SELECT * FROM province", con);
SqlDataAdapter dacity = new SqlDataAdapter("SELECT * FROM city", con);
DataSet ds = new DataSet();
daprovince.Fill(ds, "province");
dacity.Fill(ds, "city");
ds.Relations.Add("Children", ds.Tables["province"].Columns["provinceid"], ds.Tables["city"].Columns["father"]);
return ds;
}
#endregion #region 递归绑定同一个表数据
private void InitTree()
{
DataTable dt = GetTreeViewTable();
DataView dv = new DataView(dt);
dv.RowFilter = "ParentID=0";
TreeView1.ShowCheckBoxes = TreeNodeTypes.All;
foreach (DataRowView drv in dv)
{
TreeNode node = new TreeNode();
node.Text = drv["Subject"].ToString();
node.Value = drv["ID"].ToString();
node.Expanded = false;
TreeView1.Nodes.Add(node);
AddReplies(dt,node);
}
} private DataTable GetTreeViewTable()
{
string constring = System.Configuration.ConfigurationSettings.AppSettings["ConnectionString"];
SqlConnection con = new SqlConnection(constring);
SqlDataAdapter da = new SqlDataAdapter("SELECT * FROM tree", con);
DataTable dt = new DataTable();
da.Fill(dt);
return dt;
} private void AddReplies(DataTable dt, TreeNode node)
{
DataView dv = new DataView(dt);
dv.RowFilter = "ParentID=" + node.Value;
foreach (DataRowView drv in dv)
{
TreeNode replyNode = new TreeNode();
replyNode.Text = drv["Subject"].ToString();
replyNode.Value = drv["ID"].ToString();
replyNode.Expanded = false;
node.ChildNodes.Add(replyNode);
AddReplies(dt,replyNode);
}
}
#endregion
drop table [dbo].[Tree]
GOif exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[city]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
drop table [dbo].[city]
GOif exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[province]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
drop table [dbo].[province]
GOCREATE TABLE [dbo].[Tree] (
[ID] [int] NULL ,
[ParentID] [int] NULL ,
[Subject] [nvarchar] (255) COLLATE Chinese_PRC_CI_AS NULL ,
[Url] [nvarchar] (255) COLLATE Chinese_PRC_CI_AS NULL
) ON [PRIMARY]
GOCREATE TABLE [dbo].[city] (
[id] [int] NOT NULL ,
[cityID] [nvarchar] (6) COLLATE Chinese_PRC_CI_AS NULL ,
[city] [nvarchar] (50) COLLATE Chinese_PRC_CI_AS NULL ,
[father] [nvarchar] (6) COLLATE Chinese_PRC_CI_AS NULL
) ON [PRIMARY]
GOCREATE TABLE [dbo].[province] (
[id] [int] NOT NULL ,
[provinceID] [nvarchar] (6) COLLATE Chinese_PRC_CI_AS NULL ,
[province] [nvarchar] (40) COLLATE Chinese_PRC_CI_AS NULL
) ON [PRIMARY]
GO
在2005里
把这句话//pNode.Nodes.Add(Node);改成pNode.ChildNodes.Add(Node);就可以了,测试过OK
{
DataTable ds = (new Command()).getdapte();
DataView dv = ds.DefaultView;
dv.RowFilter = "subId=" + subId;
foreach (DataRowView Row in dv)
{
TreeNode Node = new TreeNode();
if (pNode == null)
{ //添加根节点
Node.Text = Row["DepartmentName"].ToString();
TreeView1.Nodes.Add(Node);
Node.Expanded = true;
TreeViewdatail(Int32.Parse(Row["numid"].ToString()), Node); //再次递归
}
else
{ //̀添加当前节点的子节点
Node.Text = Row["DepartmentName"].ToString();
pNode.ChildNodes.Add(Node);
Node.Expanded = true;
TreeViewdatail(Int32.Parse(Row["numid"].ToString()), Node); //再次递归
}
}
}
这改成这样的方式还是不行
dv.RowFilter = "subId=" + subId;
报错
protected void initTree(int nFatherid, TreeNode fatherNode)
{ DataTable dat = (new Command()).getdapte();
DataView dv = dat.DefaultView;
dv.RowFilter = "[parentID] = " + nFatherid; foreach (DataRowView Row in dv)
{
TreeNode node = new TreeNode();
if (fatherNode == null)//根节点
{
node.Text = Row["DepartmentName"].ToString();
TreeView1.Nodes.Add(node);
initTree(Int32.Parse(Row["NumID"].ToString()), node); //再次递归
}
else
{
node.Text = Row["DepartmentName"].ToString();
node.Value = Row["NumID"].ToString();
fatherNode.ChildNodes.Add(node);
initTree(Int32.Parse(Row["NumID"].ToString()), node);//递归
}
} }
为什么运行以后没有报任何错,在表示层就显示出东西
subId,仔细检查,程序没什么问题.
这是修改以后
就是没有显示结果