按两列对Datagridview进行排序

时间:2014-02-12 12:46:54

标签: c# winforms sorting datagridview

我有一个包含3列的datagridview。但是我没有将数据源绑定到datagridview。 它有三列。

EmpName,银泰,OutTime

我可以在datagridview中编辑EmpName。

我想在编辑一行后对datagridview中的内容进行排序。

我想首先按EmpName排序,然后按InTime排序。 时间是AM,PM时间格式(例如:下午2:00)。

我只能按一列排序数据。 我用了,

dgvSchedule.Sort(dgvSchedule.Columns[0],ListSortDirection.Ascending);

但是如何按多列排序。特别是当时间是AM PM格式时。 请帮帮我。

提前致谢。

1 个答案:

答案 0 :(得分:1)

以某种方式实现IComparer

private class CustomComparer : IComparer
{
    private static int SortOrder = 1;

    public CustomComparer(SortOrder sortOrder)
    {
        SortOrder = sortOrder == SortOrder.Ascending ? 1 : -1; 
    }

    public int Compare(object x, object y)
    {
        DataGridViewRow row1 = (DataGridViewRow)x;
        DataGridViewRow row2 = (DataGridViewRow)y;

        int result = row1.Cells["EmpName"].Value.ToString().CompareTo(
                                    row2.Cells["EmpName"].Value.ToString());

        if ( result == 0 )
        {
            result = DateTime.ParseExact(
                         row1.Cells["InTime"].Value.ToString(),
                         "h:mm tt",
                         CultureInfo.InvariantCulture).TimeOfDay
                   .CompareTo(
                     DateTime.ParseExact(
                         row2.Cells["InTime"].Value.ToString(),
                         "h:mm tt",
                         CultureInfo.InvariantCulture).TimeOfDay);
        }

        return result * SortOrder;
    }

用法是:

dgvSchedule.Sort(new CustomComparer(ListSortDirection.Ascending));