DataGridView自定义在WinForm中排序

时间:2010-08-18 19:35:12

标签: c# sorting datagridview

我的DataGridView控件当前使用绑定数据的Sort属性进行排序,但它没有按照我想要的方式进行。

我有一个名为Employee的列,显示为“名字姓氏”。

当我按Employee排序时,Amy Z_Lastname列在John A_Lastname之前,这意味着我更愿意按姓氏排序。

可以将Employee字符串分成3部分,包括DataTable中的部分,并将排序设置为“Lastname,Firstname”,然后隐藏Lastname和Firstname列。

而不是学习如何覆盖默认的IComparer(或其使用的任何内容),以提供有关如何按我想要的方式排序的说明(我更喜欢的答案)。

1 个答案:

答案 0 :(得分:3)

Custom sorting in the DataGridView

  

DataGridView对此一无所知   当然是排名。默认   排序方案(自动排序   对于数据绑定列)的调用   DataGridView.Sort()通过一列   标题鼠标单击只需委托给   IBindingList的实现   ApplySort()在您绑定的列表中   到网格。通常,这个列表   将是一个DataView。用我的   ObjectListView实现,这个   将是一个任意列表的视图   业务对象。无论哪种方式,你结束   比较的属性   列表中的项目使用   IComparable的实现   物业类型。

     

<强>详情

     

PropertyComparers属性公开   一个PropertyComparersCollection,它   是属性名称键的字典   和IComparer值。你可以替换   使用的IComparer属性   PropertyComparersCollection.Add()   方法或索引器(例如   view.PropertyComparers [“PropName”] =   myComparer)。要恢复默认值   IComparable排序,使用   PropertyComparersCollection.Remove()   方法或将IComparer值设置为   通过索引器返回null。

     

如果将IComparer添加到   PropertyComparers集合,它会   用于所有后续的排序,直到   它被从集合中删除或   它被另一个IComparer取代。   如果ObjectListView已经存在   添加IComparer时排序   或者从PropertyComparers中删除   视图将自动重新排序。

     

如果你想改变多个   视图后的属性比较器   排序后,可以使用ObjectListView   BeginUpdate()和EndUpdate()方法   抑制ListChanged和Sort   事件直到所有IComparers   已被改变。这可以防止   多次刷新   DataGridView的。如果是ObjectListView   在IComparers时没有排序   添加或删除,没有自动   重新排序已经完成。

     

注意在多个上排序时   列,自定义IComparer即可   用于一种属性,和   另一个默认IComparable排序。

e.g:

private void radioButtonSortProgram_CheckedChanged(object sender, EventArgs e)

{

    if (this.radioButtonSortProgramAlpha.Checked)

        this.view.PropertyComparers["Program"] = new CustomerProgramComparerAlpha();

    else if (this.radioButtonSortProgramRank.Checked)

        this.view.PropertyComparers["Program"] = new CustomerProgramComparerRank();

    else

        this.view.PropertyComparers.Remove("Program");

}