首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >按两列对Datagridview进行排序

问按两列对Datagridview进行排序
EN

Stack Overflow用户
提问于 2014-02-12 20:46:54
回答 1查看 2.1K关注 0票数 1

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

EmpName、InTime、OutTime

我可以在datagridview中编辑EmpName。

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

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

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

代码语言:javascript
复制
dgvSchedule.Sort(dgvSchedule.Columns[0],ListSortDirection.Ascending);

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

提前谢谢。

EN

回答 1

Stack Overflow用户

发布于 2014-02-12 21:20:59

以某种方式实现IComparer:

代码语言:javascript
复制
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;
    }

用法为:

代码语言:javascript
复制
dgvSchedule.Sort(new CustomComparer(ListSortDirection.Ascending));
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21728420

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档