WinForms.DataGridView控件

本文探讨了DataGridView控件的数据绑定及排序问题,介绍了两种数据绑定方法及其特点,并详细解释了如何通过手工实现排序功能,尤其是在使用List作为数据源时遇到的异常及解决办法。

使用数据绑定的方式在其中显示数据
1. 可以在设计时不添加Columns集合,指定DataSource属性后,列的出现顺序无法预料(.NET 会将该DataSource对象的全部公共属性拉上去显示),目前我也不知道是否可以预先安排;
2.可以在设计时手工添加Columns集合,并指定这些列标题的DataPropertyName属性为你想在这一列绑定的属性名称;这种方式可以达到预先安排列的出现顺序的目的。(这一方式对于数据源是DataTable对象时也是实用的,这时DataPropertyName属性对应于DataTable的列名称)

以上2种情况都无法让.NET为你自动排序,你单击列标题,不会出现排序的图标,这一排序功能估计要手工实现了。

在数据列上执行排序操作
这部分的内容非常多而且复杂,我只能就我遇到的问题慢慢的补充完整了。
我使用了数据源绑定的方式,将DataGridView绑定到一个List<>对象上,发现没法自动排序,于是手工去在事件ColumnHeaderMouseClick中实现排序代码,大致这个样子:

ContractedBlock.gifExpandedBlockStart.gifColumnHeaderMouseClick事件中实现排序
None.gifprivate void dgvFiles_ColumnHeaderMouseClick(object sender, DataGridViewCellMouseEventArgs e)
ExpandedBlockStart.gifContractedBlock.gif
dot.gif{
InBlock.gif    DataGridViewColumn col 
= dgvFiles.Columns[e.ColumnIndex];
InBlock.gif
InBlock.gif    ListSortDirection direction;
InBlock.gif    
if (dgvFiles.SortOrder == SortOrder.Ascending)
ExpandedSubBlockStart.gifContractedSubBlock.gif    
dot.gif{
InBlock.gif        direction 
= ListSortDirection.Descending;
ExpandedSubBlockEnd.gif    }

InBlock.gif    
else
ExpandedSubBlockStart.gifContractedSubBlock.gif    
dot.gif{
InBlock.gif        direction 
= ListSortDirection.Ascending;
ExpandedSubBlockEnd.gif    }

InBlock.gif
InBlock.gif    dgvFiles.Sort(col, direction);
ExpandedBlockEnd.gif}

None.gif
None.gif

在我单击列标题调试时,遭遇如下异常:
System.InvalidOperationException: DataGridView 控件必须绑定到 IBindingList 对象才能排序

查看一下MSDN,List<>果然没有实现IBindingList接口。
最后的解决方法:将数据源更改为DataTable对象,就可以自动实现排序了(以前的手工添加行也是可以自动实现排序的)。

如君所见,这似乎并未涉及到如何编写排序代码的问题;呵呵,以后遭遇到了再来补充了。

MSDN中的这2个条目(自动链接到你本地的MSDN文档)对排序问题阐述的非常清楚,有时间研究研究,最好在项目中研究,免得看了又忘了:
如何:自定义 Windows 窗体 DataGridView 控件中的排序
Windows 窗体 DataGridView 控件中的列排序模式

转载于:https://www.cnblogs.com/Peter-Yung/archive/2007/07/07/809626.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值