C# WinForm TreeView 动态绑定数据库例如:省、市、区县 三级

本文介绍了一种使用TreeView控件实现省市县三级联动的方法。通过从数据库获取数据并逐级填充节点的方式,实现了完整的省市县选择功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前段时间做项目用到了TreeView,闲来没事自己想总结一下TreeView的绑定省市县的方法,希望对想学习的博友有所帮助。提示:省市县数据库可以在网上下载资源很多的。废话不多说了上代码……


用到的与数据库连接的方法:

        /// <summary>
        /// 执行查询数据
        /// </summary>
        /// <param name="commandType">SqlCommand命令类型 (存储过程, T-SQL语句, 等等。)</param>
        /// <param name="cmdText">存储过程的名字或者 T-SQL 语句</param>
        /// <param name="para">以数组形式提供SqlCommand命令中用到的参数列表</param>
        /// <returns>>返回一个包含结果的DataSet</returns>
	<span style="white-space:pre">	</span>GetDataSet(CommandType commandType, string cmdText, params SqlParameter[] para)

具体代码就不贴出来了,就是返回一个数据集。
接下来的代码就是对TreeView的绑定操作了

<span style="white-space:pre">	</span>private void BindTreeView()
        {
		TreeNode ProvinceNode, CityNode, DistrictNode;
        	DataSet ds = new DataSet();
        	DataTable table = new DataTable();
        	DataTable districtidTable = new DataTable();

		string sql = "select provinceid,provincename from s_province";
            	string citySql = "select cityid,cityname from s_city where provinceid=@provinceid";
            	string districtSql = "select districtid,districtname from s_district where cityid=@cityid";
            	ds = DbHelp.GetDataSet(CommandType.Text, sql, null);
            	for (int i = 0; i < ds.Tables[0].Rows.Count; i++)
            	{
                	ProvinceNode = new TreeNode(); //创建【省】节点对象  
                	ProvinceNode.Text = ds.Tables[0].Rows[i]["provincename"].ToString(); //显示节点的文本  
                	ProvinceNode.Tag = int.Parse(ds.Tables[0].Rows[i]["provinceid"].ToString()); //保存对应节点的值  
                	treeView1.Nodes.Add(ProvinceNode);  //将节点填充到树形控件上

                	SqlParameter[] parameters = { 
                        	new SqlParameter("@provinceid", SqlDbType.Int ,4) , 
                    	};
                	// 设置参数类型 
                	parameters[0].Value = int.Parse(ds.Tables[0].Rows[i]["provinceid"].ToString());
                	table = DbHelp.GetDataSet(CommandType.Text, citySql, parameters).Tables[0];
                	for (int j = 0; j < table.Rows.Count; j++)
                	{
                    		CityNode = new TreeNode(); //创建【市级】节点  
                    		CityNode.Text = table.Rows[j]["cityname"].ToString(); //显示节点的文本  

                    		CityNode.Tag = int.Parse(table.Rows[j]["cityid"].ToString());//显示节点对应的值  
                    		ProvinceNode.Nodes.Add(CityNode); //将节点绑定到ProvinceNode中


                    		SqlParameter[] district = { 
                            		new SqlParameter("@cityid", SqlDbType.Int ,4) , 
                        	};
                    	// 设置参数类型 
                    	district[0].Value = int.Parse(table.Rows[j]["cityid"].ToString());
                    	districtidTable = DbHelp.GetDataSet(CommandType.Text, districtSql, district).Tables[0];
                    	for (int n = 0; n < districtidTable.Rows.Count; n++)
                    	{
                        	DistrictNode = new TreeNode(); //创建【县区】节点  
                        	DistrictNode.Text = districtidTable.Rows[n]["districtname"].ToString(); //显示节点的文本  
                        	DistrictNode.Tag = int.Parse(districtidTable.Rows[n]["districtid"].ToString()); //显示节点对应的值  
                        	CityNode.Nodes.Add(DistrictNode); //将该节点填充到CityNode节点中
                    	}
                }
         }
}
OK,齐活了这就……

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值