【问题标题】:Sort Datagridview by Two Columns按两列对 Datagridview 排序
【发布时间】:2014-03-10 19:22:30
【问题描述】:

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

EmpName,InTime,OutTime

我可以在 datagridview 中编辑 EmpName。

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

我想先按 EmpName 排序,然后按 InTime 排序。 时间采用 AM、PM 时间格式(例如:2:00 PM)。

我只能按一列对数据进行排序。 我用过,

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

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

提前致谢。

【问题讨论】:

  • 您可以使用重载Sort(IComparer) 来实现您的目标。
  • 怎么做.. 我不知道。请帮忙。
  • 参考这个链接会有帮助,它实现了ICompare接口,并使用了上面所说的Sort方法。 msdn.microsoft.com/en-us/library/…

标签: c# winforms sorting datagridview


【解决方案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));

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-04-06
    • 2012-02-12
    • 2010-10-05
    • 2012-05-10
    相关资源
    最近更新 更多