表结构
父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 控件中显示分层数据
请大家帮忙
谢谢
你搜索一下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,仔细检查,程序没什么问题.
这是修改以后
就是没有显示结果