Winform DatagridView Numeric Column Sorting

前端 未结 6 1870
有刺的猬
有刺的猬 2021-02-06 05:26

I am using just a simple DataGridView to hold a bunch of data (Funny that).

I have decimals in a particular column. But when it comes to ordering by that decimal column

6条回答
  •  隐瞒了意图╮
    2021-02-06 06:20

    You can solve this by adding a handler for the SortCompare event on the DataGridView with the following code:

    private void dataGridView1_SortCompare(object sender, DataGridViewSortCompareEventArgs e)
    {
        if (e.Column.Index == 0)
        {
            if (double.Parse(e.CellValue1.ToString()) > double.Parse(e.CellValue2.ToString()))
            {
                e.SortResult = 1;
            }
            else if (double.Parse(e.CellValue1.ToString()) < double.Parse(e.CellValue2.ToString()))
            {
                e.SortResult = -1;
            }             
            else
            {
                e.SortResult = 0;
            }
            e.Handled = true;
       }
    }
    

    From MSDN there is this description of the SortResult values:

    Less than zero if the first cell will be sorted before the second cell; zero if the first cell and second cell have equivalent values; greater than zero if the second cell will be sorted before the first cell.

    Note that in my test bed the only numeric column was the first (with index 0) so that is why I have the check on the column index.

    Also, depending on your needs and data you may want to refine my code - for example, my code will throw an exception if for some reason you have non numeric data in your column.

    You have probably seen it, but here is a link to the MSDN page on customising the DataGridView sorting. As you say, they only deal with text.

提交回复
热议问题