`
ihuashao
  • 浏览: 4769321 次
  • 性别: Icon_minigender_1
  • 来自: 济南
社区版块
存档分类
最新评论

借鉴ANJOU的方法改写了上次的TreeView

阅读更多
TreeView 是一个很好的表达树形结构的控件。如果要加载的数据比较多的话,就需要逐层加载数据。要实现逐层加载数据,首先想到的就是TreeView 的 BeforeExpand 事件,它在节点展开前触发。但问题是BeforeExpand 事件每次展开时都会触发。有没有只在首次展开才触发的事件呢,可惜没找到。没关系,我们自定义一个 TreeView 节点类,给它加一个是否首次被展开的属性。
///<summary>
///自定义节点类,继承于系统的TreeNode类,给节点增加一个IsFirstExpand属性
///</summary>
publicclassInheritTreeNode:TreeNode
{
privateboolisFirstExpand=true;

publicboolIsFirstExpand//属性
{
get{returnisFirstExpand;}
set{isFirstExpand=value;}
}

publicInheritTreeNode():base(){}
publicInheritTreeNode(stringtext):base(text){}
}
下面是一个加载省市的完整代码:
usingSystem;
usingSystem.Collections.Generic;
usingSystem.ComponentModel;
usingSystem.Data;
usingSystem.Data.SqlClient;
usingSystem.Drawing;
usingSystem.Text;
usingSystem.Windows.Forms;

namespacetest
{
publicpartialclassTreeStruc:Form
{
publicTreeStruc()
{
InitializeComponent();
}

SqlConnectionconn
=newSqlConnection("server=zhuzy;integratedsecurity=sspi;database=library");
SqlDataAdapterda;
DataSetds
=newDataSet();

///<summary>
///自定义节点类,继承于系统的TreeNode类,给节点增加一个IsFirstExpand属性
///</summary>
publicclassInheritTreeNode:TreeNode
{
privateboolisFirstExpand=true;

publicboolIsFirstExpand//属性
{
get{returnisFirstExpand;}
set{isFirstExpand=value;}
}

publicInheritTreeNode():base(){}
publicInheritTreeNode(stringtext):base(text){}
}

stringid="";
privatevoidTree_Load(objectsender,EventArgse)
{
da
=newSqlDataAdapter("selectprovince_id,province_namefromprovince",conn);
da.Fill(ds,
"province");
for(inti=0;i<ds.Tables["province"].Rows.Count;i++)
{
InheritTreeNoderoot
=newInheritTreeNode(ds.Tables["province"].Rows[i][1].ToString().Trim());
id
=ds.Tables["province"].Rows[i][0].ToString().Trim();
this.treeView1.Nodes.Add(root);
AddChileNode(root);
id
="";//
}
}

///<summary>
///添加node的子节点
///</summary>
privatevoidAddChileNode(TreeNodenode)
{
da
=newSqlDataAdapter("selectcity_namefromcitywhereprovince_id='"+id+"'",conn);
da.Fill(ds,
"city");
try
{
for(intj=0;j<ds.Tables["city"].Rows.Count;j++)
{
node.Nodes.Add(
newInheritTreeNode(ds.Tables["city"].Rows[j][0].ToString().Trim()));
}
}
catch{}
ds.Tables[
"city"].Clear();//
}

///<summary>
///节点展开之前事件
///</summary>
privatevoidtreeView1_BeforeExpand(objectsender,TreeViewCancelEventArgse)
{
InheritTreeNodenode
=(InheritTreeNode)e.Node;//获取要选中、展开、折叠或选择的树节点e.Node

if(node!=null)
{
//判断该节点是否首次被展开
if(node.IsFirstExpand)
{
for(inti=0;i<node.Nodes.Count;i++)
{
AddChileNode(node.Nodes[i]);
////为e.Node下的每个子节点,添加子节点
}
}
}
node.IsFirstExpand
=false;
}
}
}

结果:
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics