在mysql和gridview中按年份和日期排序

时间:2016-01-06 07:05:59

标签: c# mysql asp.net gridview

我有工资表,其中我存储工资详情与相应的月份和年份以及付款日期。我在我的ASP.net c#应用程序中在gridview中显示这些数据。我想在第一页中显示最新的数据。 在我的样本工资数据库下面:

+------------+-------+----------+------+----------+------+-------------+
| EmployeeID | Gross | TotalDed | Net  |  Month   | Year | paymentdate |
+------------+-------+----------+------+----------+------+-------------+
|       2066 |  2219 |     3750 | 1531 | January  | 2016 | 30.01.2016  |
|       2023 |  2218 |     1649 |  570 | January  | 2016 | 30.01.2016  |
|       2001 |  2219 |     3750 | 1531 | October  | 2015 | 30.10.2015  |
|       2023 |  2218 |     1649 |  570 | October  | 2015 | 30.10.2015  |
|       2034 |  2328 |     5728 | 3400 | October  | 2015 | 30.10.2015  |
|       2023 |  2218 |     1649 |  570 | November | 2015 | 30.11.2015  |
|       2030 |  2219 |     1550 |  669 | November | 2015 | 30.11.2015  |
|       2047 |  2218 |     1649 |  570 | November | 2015 | 30.11.2015  |
|       2031 |  2219 |     8450 | 6231 | December | 2015 | 30.12.2015  |
|       2057 |  2219 |     8450 | 6231 | December | 2015 | 30.12.2015  |
|       2023 |  2218 |     1649 |  570 | December | 2015 | 30.12.2015  |
+------------+-------+----------+------+----------+------+-------------+

我希望此表格在gridview中以分页显示。

 String sQuery = @"SELECT EmployeeID,GrossSalary,TotalDed,NetSalary,Month,Year,paymentdate
                                    FROM  salary ";

                MySqlDataAdapter ada = new MySqlDataAdapter(sQuery, GlobalCS.objMyCon);                          

                using (DataTable dt = new DataTable())
                {
                    ada.Fill(dt);
                    GridView1.DataSource = dt;
                    GridView1.DataBind();
                }

但它显示最后一页的最新信息。 如果我使用

SELECT EmployeeID,GrossSalary,TotalDed,NetSalary,Month,Year,paymentdate FROM salary order by Paymentdate

然后它显示2016年1月16日,2016年10月,2016年11月2016年12月。 但我想要展示的是2015年12月,2015年12月,2015年11月,2015年10月 我试过了

SELECT EmployeeID,GrossSalary,TotalDed,NetSalary,Month,Year,paymentdate FROM  salary order by month and year

输出是所有数据的混合。那我该怎么办呢?

1 个答案:

答案 0 :(得分:0)

如果您的Paymentdatestring数据类型,则order by Paymentdate会在Lexicographical order中对您的结果进行排序。

在将Paymentdate转换为date之前。

SELECT 
  `EmployeeID`,
  `GrossSalary`,
  `TotalDed`,
  `NetSalary`,
  `Month`,
  `Year`,
  `paymentdate` 
FROM  salary 
order by STR_TO_DATE(`paymentdate`,'%d.%m.%Y') DESC

sql fiddle demo

注意: - 以date数据类型而不是string数据类型

存储date数据是一种不好的做法