ComboBox的下拉选项的树状显示的几种方法对比

本文探讨了在ComboBox中实现下拉树状选项的多种方法,包括使用现成控件、TreeView、ListView以及结合TextBox和CheckBox的解决方案。作者在尝试中遇到的问题和最后选择的存储过程方法进行了详述。

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

 因为项目里需要在ComboBox里的下拉框里填充树状的选择项,我个人感觉最好还可以做到子结点的伸缩,因此颇费了一些功夫,现在大体做了个总结。

1。第一考虑的是下载现成的控件。
网上找了几个:
1)http://www.codeproject.com/cs/miscctrl/customcombos.asp
2)http://www.codetools.com/cs/miscctrl/ComboBoxTree.asp

第一个不好用,第2个可以用,不过总有问题。每次你在加载了ComboBoxTree的页面添加或修改别的控件后,运行就报错,需要在初始化函数里把一个值人工改为空。而且这个控件只能把每项的name的string值呈现树形,而不能把每个ITEM的text和value一一对应,总之用的不顺手,就放弃了。

         test

 

2。用treelistView,鼠标单击columnHeader,则把treeListView的高度变高,鼠标落在别的区域,则高度收缩,columnHeader显示的是当前选择项
treelistView里的每个item都可以把text和value分开一一对应,而listView好象不可以。

/// <summary>
/// 获取部门列表
/// </summary>

private   void  getDeptItem()
{
     PoliceArchives.DbConnect.DBAccess selectDeptDBAccess 
= new oliceArchives.DbConnect.DBAccess();
     
string sqlStr = "SELECT * from dept_tab";
     selectDeptDBAccess.SelectDataSetCommand
= sqlStr;
     selectDeptDBAccess.Open();
     deptDS
= selectDeptDBAccess.GetDataSet;

     DecenTest.Modularization.Controls.TreeListView.TreeListViewItemCollection itemCollection
=new DecenTest.Modularization.Controls.TreeListView.TreeListViewItemCollection();

    
if(deptDS.Tables[0].Rows.Count>0)
    
{
    
this.treeListView1.Visible=true;
    
循环遍历表一次,把每项添加成TreeListViewItem
                    
    
表再遍历一次,每条记录循环一次TreeListViewItem集合,找出该记录的item和父item

}
 

---用treeView实现: 

test
}

 

3。用textBox+checkBox(或者button)+listview的方法
具体就是用鼠标事件控制落在checkBox(button)的区域,一旦鼠标释放或点击,则将listView隐藏或显示,其中listView为树状显示。

用listView获取部门列表

4。也是最后采用的方法,就是ComboBox+存储过程,即在存储过程里重新排列所有ITEM,让其成为树形,再显示出来。本来想用SQL自定义函数排序,搞了很久未果,最终还是用存储过程实现。这将在之后的文章里说明。这种方法是本质解决,虽然不能象treeView一样收缩展开,但是前几种方法感觉都是敷衍的障眼法。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值