none
用前台sqldatasource给dropDownList赋值出现了错误 RRS feed

  • 问题

  •     我想用sqldatasource和DropDownList,在asp.net界面 实现下面的功能:

        如果系统时间是2014年,那么这个dropDownList就显示2015至2006年共计10个选项,因此我写了下面的循环:

        我的问题是:

        1.sql语句的结果如图1所示,不像是一个“表”,不知道能否作为dropDownList的数据源。

        2.我把下列sql语句放到aspnet的sqldatasource中去,提示错误。

        请问该怎么改正呢?谢谢!

    -------------------------------------图1----------------------------


    -----------------------------代码------------------------------

    declare @i int
    set @i=1
    while @i<10
    begin 
    select DATEPART(YEAR,GETDATE())+2-@i as y
    set @i =@i+1
    end


    C# 菜鸟中的雏鸟!提的问题也许很幼稚,但我是认真的。希望看在党国的面子上拉兄弟一把!

    2014年2月11日 7:35

答案

  • http://technet.microsoft.com/zh-tw/library/ms186819.aspx

    参考 SQL DATEADD 做法:

    ; with  CTE as
            (
            select  datepart(year, DateAdd(year, -9, GETDATE())) as yr
            union all
            select  yr + 1
            from    CTE
            where   yr < datepart(year, DateAdd(year, 1, GETDATE()))
            )
    select  yr
    from    CTE

    DropDownList 这个部分你可以通过的 SelectedValue 属性使用 DateTime.Now.ToString(“yyyy”)做设定。

    2014年2月11日 9:38

全部回复

  • 参考:http://stackoverflow.com/questions/16857539/list-of-distinct-years-between-two-dates

    将SQL改为

    DECLARE @startdate date
    DECLARE @enddate date
    set @startdate='2006/01/01'
    set @enddate='2015/01/01'
    ; with  CTE as
            (
            select  datepart(year, @startdate) as yr
            union all
            select  yr + 1
            from    CTE
            where   yr < datepart(year, @enddate)
            )
    select  yr
    from    CTE
    
    

    应该就可以了,你可以照这个方式试看看。

    2014年2月11日 8:02
  •     谢谢你的解答,with我没用过,所以不是很懂。不过你的答案基本就是我想要的结果了。

        但我现在是想只给出一个@变量,例如2014.1.1(这个变量我通过“DATEPART(YEAR,GETDATE())得到”),然后在这个时间的基础上 ,拓展它的跨度为   2005年至2015年,并且把本年的2014放在dropDownList的第一位。

        你给的结果是从第一个变量到第二个变量的所有年份,而我想要2014年的前9年和后1年,并且把2014年放在首位。

        不知道能否实现得了!?

        


    C# 菜鸟中的雏鸟!提的问题也许很幼稚,但我是认真的。希望看在党国的面子上拉兄弟一把!

    2014年2月11日 9:18
  • http://technet.microsoft.com/zh-tw/library/ms186819.aspx

    参考 SQL DATEADD 做法:

    ; with  CTE as
            (
            select  datepart(year, DateAdd(year, -9, GETDATE())) as yr
            union all
            select  yr + 1
            from    CTE
            where   yr < datepart(year, DateAdd(year, 1, GETDATE()))
            )
    select  yr
    from    CTE

    DropDownList 这个部分你可以通过的 SelectedValue 属性使用 DateTime.Now.ToString(“yyyy”)做设定。

    2014年2月11日 9:38
  • select datepart(year, DateAdd(year, 1, GETDATE()))
    union select datepart(year, GETDATE())
    Union select datepart(year, DateAdd(year, -1, GETDATE()))
    Union select datepart(year, DateAdd(year, -2, GETDATE()))
    Union select datepart(year, DateAdd(year, -3, GETDATE()))
    Union select datepart(year, DateAdd(year, -4, GETDATE()))
    Union select datepart(year, DateAdd(year, -5, GETDATE()))
    Union select datepart(year, DateAdd(year, -6, GETDATE()))
    Union select datepart(year, DateAdd(year, -7, GETDATE()))
    union select datepart(year, DateAdd(year, -8, GETDATE()))
    union select datepart(year, DateAdd(year, -9, GETDATE()))

     
    接著你在DropDownList.databound event裡,把今年的設定為"selected"


    大家一齊探討、學習和研究,謝謝!
    MCSD, MCAD, MCSE+I, MCDBA, MCDST, MCSA, MCTS, MCITP, MCPD,
    MCT, Microsoft Community Star(TW & HK),
    Microsoft MVP for VB.NET since 2003
    My MSMVP Blog

    2014年2月12日 4:54
  •     感谢回答,我的问题基本解决了,这里还想问深一点。

        如果再加入‘未选择’,和2012、2013.。。联合使用,该怎么实现呢? 我只知道用下面的方法,还不会用with,真心求教,3Q

    select '未选择' as yr ,0 as sequence
    union select CONVERT(nvarchar(50), datepart(year, DateAdd(year, 1, GETDATE()))) as yr ,1 as sequence
    union select CONVERT(nvarchar(50), datepart(year, GETDATE()) ) as yr ,1 as sequence
    Union select CONVERT(nvarchar(50), datepart(year, DateAdd(year, -1, GETDATE())))  as yr ,1 as sequence
    order by sequence,yr asc


    C# 菜鸟中的雏鸟!提的问题也许很幼稚,但我是认真的。希望看在党国的面子上拉兄弟一把!

    2014年2月13日 8:48
  • Hi,

    如果原始的那个问题已经被解决,还请将提供答案的帖子标记为答复。

    针对你现在的问题,还请重新开一个新的帖子,方便更多的人提供帮助。

    谢谢!!

    2014年2月20日 8:53
    版主