Что является лучшим способом сделать неупорядоченные списки обратных хронологических дат в asp.net 2.0 с vb - PullRequest
0 голосов
/ 03 января 2012

Мне нужно создать неупорядоченный список дат для архива новостей ... Это должно выглядеть следующим образом

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 для месяцев, вложенных в каждый год, однако это не кажется очень практичным и генерирует ссылки в течение нескольких месяцев, даже если в новостях нет записей ...

Есть ли способ, которым я могу построить это дерево автоматически и включать только годы / месяцы, в которых есть записи новостей.Я могу получить список временных отметок SQL Server из БД для всех новостей, а затем хотел бы заполнить список на основе этого ...

Может ли кто-нибудь указать мне правильное направление?

Ответы [ 2 ]

1 голос
/ 03 января 2012

Вам нужно узнать годы и месяцы с новостями из 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 голосов
/ 03 января 2012

Вы можете выбрать отдельные значения года, месяца из базы данных и заказать их для вас.

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

При циклическом преобразовании результата запоминайте «предыдущий год» в переменной и отображайте только год, если он изменился (т. Е. previousYear не соответствует строке, на которую вы смотрите)

Какой-то простой код, использующий вымышленный класс YearMonth только для демонстрации

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>"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...