在WinForm中实现递归的TreeView绑定,要求能增删改。

表结构:IDCodeName101建材20101实木3010103梨花木402家居50201沙发6020103实木沙发关系如下:依照Code的规则,01是父节点,0101... 表结构:
ID Code Name
1 01 建材
2 0101 实木
3 010103 梨花木
4 02 家居
5 0201 沙发
6 020103 实木沙发

关系如下:依照Code的规则,01是父节点,0101 、0102等以01开头的是01的子节点,010101、010102、010103等以0101开头的是0101的子节点,以此类推

要求实现:
在WinForm中实现递归的TreeView绑定,要求能增删改。
急等,高分送上,在线等。
叩谢!
展开
 我来答
chenfeng337
2011-06-15
知道答主
回答量:7
采纳率:0%
帮助的人:0
展开全部
#region 显示
/// <summary>
/// 增加顶级节点
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>

public void CreatTree()
{
SqlConnection conn = new SqlConnection(SqlHelper.connString);
SqlDataAdapter oDa = new SqlDataAdapter("Select code,name from org where len(code)=2 ", conn);
DataSet ds = new DataSet();
oDa.Fill(ds, "org ");

for (int i = 0; i < ds.Tables[0].Rows.Count; i++)
{
TreeNode NodeX = new TreeNode();
NodeX.Text = ds.Tables[0].Rows[i]["name"].ToString();
NodeX.Tag = ds.Tables[0].Rows[i]["code"].ToString();
NodeX.ImageIndex = 0;
NodeX.Nodes.Add(" ");
treeView1.Nodes.Add(NodeX);
}
}

/// <summary>
/// 每次点击节点扩展前,为该节点添加实际的子节点
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void treeView1_BeforeExpand(object sender, System.Windows.Forms.TreeViewCancelEventArgs e)
{
if (e.Node.ImageIndex == 1)
{
return;
}
if (e.Node.GetNodeCount(false) == 1 && e.Node.Nodes[0].Text == " ")
{
e.Node.Nodes[0].Remove();
EnumerateDirs(e.Node); //自定义的子节点添加函数
}

}

/// <summary>
/// 添加子节点
/// </summary>
/// <param name="code"></param>
private void EnumerateDirs(System.Windows.Forms.TreeNode code)
{
string strSQL;
strSQL = "Select * from org Where code Like '" + code.Tag + "[0-9][0-9]'";
SqlConnection conn = new SqlConnection(SqlHelper.connString);
SqlDataAdapter oDa = new SqlDataAdapter(strSQL, conn);
DataSet ds = new DataSet();
oDa.Fill(ds);
code.SelectedImageIndex = 1;
foreach (DataRow dRow in ds.Tables[0].Rows)
{
TreeNode oNode = new TreeNode();
oNode.Text = dRow["name"].ToString(); ;
oNode.Tag = dRow["code"].ToString();
oNode.ImageIndex = 0;
code.Nodes.Add(oNode);
oNode.Nodes.Add(" ");
}
}
#endregion
匿名用户
2011-06-15
展开全部
表结构这样设计个人感觉有点问题!
最好这样
ID Code Name
1 0 建材
2 1 实木
3 2 梨花木
4 0 家居
5 4 沙发
6 5 实木沙发
这样比较好理解,Code为0的表示全是顶级的!Code不为0的全是表示父节点ID
假如数据在DataTable dt中,需要添加到TreeView Tv;
//递归
void AddTreeNode(int Code,TreeNode ParentNode)
{
DataRow[] NodeRow =dt.select(string.format("Code={0}",Code));
if(NodeRow.Lenght!=0)
{
foreach(DataRow dr in NodeRow)
{
TreeNode node=new TreeNode();
node.Text=dr["Name"].Tostring();
node.Tag=dr["ID];
if(ParentNode ==null)
{
Tv.Nodes.Add(node);
}
else
{
ParentNode.Nodes.Add(node);
}
AddTreeNode(Convert.ToInt32(dr["ID"]),node);
}
}
}
//调用
void InitClass()
{
AddTreeNode(0,null);
}
追问
不是,这是领导的要求,是不能改变表的规则的,您写的方法我会写的。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式