2012-01-03 2 views
0

とasp.net 2.0に逆年代順日付の順不同リストを作成する最良の方法は、それがこの私はニュースアイテムの日付の順序なしリストを作成する必要がVB

2011 
    Dec 
    Nov 
    etc.. 
2010 
    Dec 
    Nov 
    etc... 
Older 
のようになります...アーカイブいただきました ここ

Dim StartYear As DateFormat = Date.Now.Year 
    Dim EndYear As DateFormat = Date.Now.Year - 2 

    ltlArchives.Text = "<ul id=""ArchivesYears"">" 
    For StartYear = StartYear To EndYear Step -1 
     ltlArchives.Text = ltlArchives.Text + "<li>" + StartYear.ToString + "</li>" 
    Next 
    ltlArchives.Text = ltlArchives.Text + "<li>Other</li>" 
    ltlArchives.Text = ltlArchives.Text + "</ul>" 

私はしかし、それは非常に実用的でいないようです。この毎年の下にネストヶ月間、forループに追加することで続けていくことができ、さらには数ヶ月のためにリンクを生成します..私はこれまで持っているものですニュースアイテムのエントリがない場合...

このツリーを自動的に構築する方法はありますか?ニュースエントリがある年月を含めるしかありません。 DBからすべてのニュースアイテムのSQL Serverタイムスタンプのリストを取得し、そのリストに基づいてリストを作成したいと考えています。

誰かが正しい方向に向いていますか?

答えて

1

のために架空のYearMonthクラスを使用してあなたは、SQL Serverからのニュース項目で年と月を見つける必要がある - 明確なクエリを使用して言います。例えば、PostedDate列と仮定すると、新しいアイテム

SELECT DISTINCT 
    datepart(year, n.PostedDate) as Year, 
    datepart(month, n.PostedDate) as Month, 
FROM 
    dbo.NewsItem n 
ORDER BY 
    Year desc, Month desc 

のエントリの日付を示すこのクエリは、あなたのニュース項目を持っている年と月を与えるだろう。今すぐリピータコントロールとバインドして、あなたが望むものを手に入れましょう。

0

データベースから別々の年、月の値を選択して、クエリを注文することができます。

SELECT DISTINCT DATEPART(YEAR, DateCreated), DATEPART(MONTH, DateCreated) 
FROM [Blah] 
ORDER BY 1 DESC, 2 DESC 

あなたは結果スルーループ変数に「前期」を覚えて、それが変更された場合のみ、年を表示する場合(つまりpreviousYearあなたが見ている行等しくない)

一部を簡単なコードだけデモンストレーション

dim ltlArchives as string 
ltlArchives = "<ul id=""ArchivesYears"">" 

dim prevYear as Int32 = 0 
For Each month as YearMonth in months 
    If (prevYear <> month.Year) Then 
     ltlArchives = ltlArchives + "<li>" + month.Year.ToString() + "</li>" 
    End If 
    ltlArchives = ltlArchives + "<li>" + month.Month.ToString() + "</li>" 
    prevYear = month.Year 
Next 

ltlArchives = ltlArchives + "</ul>" 
関連する問題