C# TreeView控件 展示数据的两种方式
程序员文章站
2022-06-08 14:02:21
...
本文档所用表结构 ItemId,ItemName,ParentId,Level,
1、普通数据绑定。将所有数据读取到临时表,再通过对表数据的筛选进而为树控件添加数据。
//初始化树
private void InitTreeView(string id, string name)
{
// 读取数据库数据到DataSet
string sql = "select ItemId,ItemName,ParentId from tb_Item ";
SqlParameter[] paras = new SqlParameter[] {
new SqlParameter("@FItemClassID",id),};
DbHelperSQL.FillDataSet(ds, sql);
//绑定树节点
treeView1.Nodes.Clear();
TreeNode rootNode = new TreeNode();
rootNode.Tag = "0";
rootNode.Text = name;
treeView1.Nodes.Add(rootNode);
getNodes1(rootNode);
rootNode.Expand();
}
//初始化树的其他节点
private void getNodes(TreeNode node)
{
DataRow[] rows = ds.Tables[0].Select("ParentId=" + node.Tag.ToString());
foreach (DataRow classdr in rows)
{
TreeNode ClassNode = new TreeNode();
ClassNode.Tag = classdr["ItemId"].ToString();
ClassNode.Text = classdr["ItemName"].ToString();
getNodes(ClassNode);
node.Nodes.Add(ClassNode);
}
ds.Dispose();
}
2、数据量太大的话,加载会有延时,这时候可以通过点击展开节点的时候进行加载数据,这样,会根据树的深度一层一层的加载数据,数据量是很小的,几乎没有延时
DataSet dsTree = new DataSet();
public void BindRootNode(string Id,string name)
{
string sqlTree = "select ItemId,ItemName,ParentId,Level from tb_item ";
DbHelperSQL.FillDataSet(dsTree, sqlTree);
treeView1.Nodes.Clear();
TreeNode rootNode = new TreeNode();
rootNode.Tag = id;
rootNode.Text = name;
treeView1.Nodes.Add(rootNode);
GetLevelNodes(rootNode, dsTree.Tables[0], rootNode.Level + 1);
rootNode.Expand();
dsTree.Dispose();
}
//按级别初始化树的其他节点
public void GetLevelNodes(TreeNode node,DataTable dt,int level)
{
DataRow[] rows = dt.Select("Level="+level+" and ParentId='"+node.Tag+"'");
if (rows.Length > 0)
{
//node.Nodes.Remove(node.NextNode);
foreach (DataRow classdr in rows)
{
TreeNode ClassNode = new TreeNode();
ClassNode.Tag = classdr["ItemId"].ToString();
ClassNode.Text = classdr["ItemName"].ToString();
node.Nodes.Add(ClassNode);
//为每个节点添加一个下级节点保证该节点前面有+
TreeNode NullNode = new TreeNode();
NullNode.Tag = "1";
NullNode.Text = "1";
ClassNode.Nodes.Add(NullNode);
}
}
else//添加判断是否绑定叶子节点
{
BindLeaf(node,dt);
}
dsTree.Dispose();
}
//这是个事件--展开节点事件
private void treeView1_AfterExpand(object sender, TreeViewEventArgs e)
{
treeView1.SelectedNode = e.Node;
if (treeView1.SelectedNode.Level != 0)
{
TreeNode tSelNode = treeView1.SelectedNode;
tSelNode.Nodes.Clear();
GetLevelNodes(treeView1.SelectedNode, dsTree.Tables[0], treeView1.SelectedNode.Level + 1);
}
}
下一篇: JSP自定义标签使用详解