■■■

2016年3月31日木曜日

DataGridView.Sortで並び替える方法

DataGridView.Sortで並び替える方法
VB.NET
Public Class CustomComparer
Implements IComparer
Private sOrder As Integer
Private
comparer As Comparer

Public Sub New(ByVal order As SortOrder)
Me.sOrder = IIf(order = SortOrder.Descending, -1, 1)
Me.comparer = New Comparer( _
System.Globalization.CultureInfo.CurrentCulture)
End Sub

Public Function Compare(ByVal x As Object, ByVal y As Object) As Integer _
Implements System.Collections.IComparer.Compare
Dim result As Integer = 0

Dim rowx As DataGridViewRow = CType(x, DataGridViewRow)
Dim rowy As DataGridViewRow = CType(y, DataGridViewRow)

For i As Integer = 0 To rowx.Cells.Count - 1
result = Me.comparer.Compare( _
rowx.Cells(i).Value, rowy.Cells(i).Value)
If result <> 0 Then
Exit For
End If
Next
i

Return result * Me.sOrder
End Function
End Class
dgv1.Sort(New CustomComparer(SortOrder.Ascending))
C#
public class CustomComparer : IComparer
{
private int sortOrder;
private Comparer comparer;

public CustomComparer(SortOrder order)
{
this.sortOrder = (order == SortOrder.Descending ? -1 : 1);
this.comparer = new Comparer(
System.Globalization.CultureInfo.CurrentCulture);
}

public int Compare(object x, object y)
{
int result = 0;

DataGridViewRow rowx = (DataGridViewRow)x;
DataGridViewRow rowy = (DataGridViewRow)y;

for (int i = 0; i < rowx.Cells.Count; i++)
{
result = this.comparer.Compare(
rowx.Cells[i].Value, rowy.Cells[i].Value);
if (result != 0)
break;
}

return result * this.sortOrder;
}
}
dgv1.Sort(new CustomComparer(SortOrder.Ascending));








■■■