Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/33.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net gridview按年龄排序_Asp.net_Gridview - Fatal编程技术网

Asp.net gridview按年龄排序

Asp.net gridview按年龄排序,asp.net,gridview,Asp.net,Gridview,我有一个列为“Age”的表,其中排序的Age如下所示: 10 years, 105 years 18 years, 60 years. 8 months. 我怎样才能不按字母顺序,而是按正确的顺序排序呢。 我不能删除“年”这个词。好吧,如果这是从数据库中删除的话 然后你可以这样做: SELECT id, FirstName, LastName, Age, cast(SUBSTRING(Age,1,Charindex(' ',Age)-1 ) as integer) as NumAge

我有一个列为“Age”的表,其中排序的Age如下所示:

10 years,
105 years
18 years,
60 years.
8 months.
我怎样才能不按字母顺序,而是按正确的顺序排序呢。
我不能删除“年”这个词。

好吧,如果这是从数据库中删除的话

然后你可以这样做:

SELECT id, FirstName, LastName, Age, 
  cast(SUBSTRING(Age,1,Charindex(' ',Age)-1 ) as integer) as NumAge
  FROM tblCustomers
  ORDER BY NumAge
所以,现在您有了一个文本显示列,但也有一个实际的“数字”列,其中包含以年为单位的实际数字-您可以在该NumAge列上正确排序。这种排序也可以通过数据视图排序来完成——因此,无论您如何对数据进行排序,如果您添加上面从该列中提取数字的列,那么通过NumAge进行排序将成为一种可能的选择

现在,如果我们没有月和年的混合,上面的方法是有效的。但是,为了解决这个问题,我们在上面改成:

SELECT id, FirstName, LastName, Age, 
    CASE
      WHEN CharIndex('month',Age) > 0 THEN
        (cast(SUBSTRING(Age,1,Charindex(' ',Age)-1 ) as integer))
      WHEN CharIndex('year',Age) > 0 THEN
        (cast(SUBSTRING(Age,1,Charindex(' ',Age)-1 ) * 12 as integer))
    END 
     AS AgeInMonths
  FROM tblCustomers
  ORDER BY AgeInMonths
所以,再一次,我们现在有一个数字和值,以月为单位表示年龄,这是可以排序的。因此,我们显示Age+文本列,但排序表达式可以使用AgeInMonths,结果是数据的顺序正确

如果你有天?然后我会用月数*12代替,用月数*30,而对于年数,则只使用*365。因此,在数年、数月或数天内获得支持并不困难

结果再次是,数据按给定的年龄按数字顺序排序。

问题也是“月”。8个月比2年长还是8个月比0年长? 如果它是最后一个,您可以使用
Linq
。 让我们说这是时代

var age = new List<string>()
{
    "10 years,",
    "105 years",
    "18 years,",
    "60 years.",
    "8 months.",
    "1 year.",
    "18 months,",
 };
结果

0 year
1 year
1 year
10 years
18 years
60 years
105 years

但您最好还是将年龄作为整数存储在DOB中,或者更好,将出生日期作为日期时间存储。

这就是您将其保存在数据库中的方式?如果是的话,那么你必须用另一个字段重新设计表,该字段的实际时间为datetime格式(或以记号表示)。你能把gridview数据绑定的代码放进去吗?不,在数据库中存储的是生日,年龄是计算出来的,如我所见。是的,它是8个月0年。如果我存储生日,如何显示年龄并按其排序?如果存储brthdate,您可以简单地计算年龄:放大数字然后尝试将其拆分,这要容易得多。假设一切都是在几个月内完成的,那么整个问题就变得容易了。其中一个将继续显示年龄+文本,但您只需在表示月份的列上进行排序。(见上面我的帖子)。然而,一开始就不清楚为什么没有存储/保存DOB或某些数值。但是,请看我的帖子——我展示了一种相当简单的T-SQL方法,它可以将给定的文本转换为月数值,然后可以在月数中对该年龄进行排序,但继续显示年龄+文本。如果您可以选择保存DOB,那么它将始终自动按数值排序。您可以为此使用日期或日期时间列。这允许您以任何方式显示DOB格式,包括2岁、5个月和3天。所以毫无疑问,使用date/datetime列,因为您如何显示该列并不影响按DOB排序-它将始终自动并始终按正确顺序排序。您可以使用Month(DOB)来获取当前月份,因此显示谁在这个月过生日的查询也很简单。我如何显示15年,但如何存储类似“15”的ans?我刚才已经解释了很多。您只需继续显示文本列,但排序时,您会在新列上排序。因此,您现在有两列—现有的一列用于显示年龄+文本,但您现在只需根据这个现在可用的数字列进行排序。因此,您的排序或按表达式排序将对NumAge起作用。但是,月份示例列是一个问题-我将更新我的帖子以处理该问题。请参阅我对上述帖子的编辑-我添加了对年和月的支持。
0 year
1 year
1 year
10 years
18 years
60 years
105 years