выпадающий список .net - PullRequest
       5

выпадающий список .net

0 голосов
/ 09 января 2010

это мой код в vb.net -

Public Sub Load_dates(ByRef DDL As System.Web.UI.WebControls.DropDownList)
    Try
        Dim i As Integer
        Dim j As Integer
        Dim time As DateTime = DateTime.Now
        For i = Now.Year To Now.Year
            For j = 0 To 11
                DDL.Items.Add((time.AddMonths(j)).ToString("MMMM") + " " + (i.ToString))
            Next
        Next
    Catch ex As Exception
        ReportError(ex)
    End Try
End Sub

После того, как я получу все месяцы, от 0 до 11, я хочу взять 11-ую запись и добавить ее как последнюю запись со знаком «+» в конце. Например: последняя запись = декабрь 2011 г., затем запись должна быть декабрь 2011 г. +

Ответы [ 3 ]

3 голосов
/ 09 января 2010

Этот код вредит на многих уровнях. Я отвечу на ваш вопрос, но сначала несколько советов:

  • Параметры должны иметь хорошие имена. «DDL» для меня не имеет смысла. Кроме того, они не должны передаваться по ссылке, если это не является абсолютно необходимым. Вы не модифицируете DLL (только то, на что она указывает), поэтому передайте ее по значению.
  • Методы, по возможности, не должны иметь побочных эффектов. Передав выпадающий список, вместо того, чтобы просто возвращать записи для него, вы вводите побочные эффекты. Это также связывает метод с конкретным выпадающим типом управления.
  • Объявления i и j излишни (при условии, что Option Infer On), и выходят за пределы цикла.
  • Почему я зациклен на текущий год? Делая это, вы ввели некоторые чувствительные ко времени ошибки (цикл может выполняться дважды, если выполняется новогодняя ночь в полночь).
  • Вы добавляете месяцы к «времени», но напечатанный год постоянен. Вы увидите "январь 2009", следующий за "декабрь 2009"!
  • Почему вы ловите такое общее исключение в рамках такого простого метода? Я не вижу вызовов, которые могли бы вызвать исключение, о котором вы хотели бы сообщить на этом уровне.
  • Что делать, если вы хотите изменить количество месяцев для проецирования вперед? «12» подразумевается спрятано глубоко внутри For-Loop!

В общем, я должен сказать, что это очень плохой код. Но это не трудно улучшить его шаг за шагом. После того, как я применил к нему свой собственный совет, я получил следующее:

Public Function GenerateMonthEntries(monthCount as integer) as IList(of String)
    dim result = new List(Of String)()
    dim time = DateTime.Now
    for i = 0 to monthCount - 1
        result.add(time.AddMonths(i).ToString("MMMM yyyy"))
    next i
    result.add(time.AddMonths(monthCount).ToString("MMMM yyyy") + "+")
    return result
End Function

... where you're using the function ...

for each entry in GenerateMonthEntries(12) 'maybe the 12 should be a constant somewhere
    whateverDropDownList.Items.add(entry)
next

Не обманывайте себя, этот код не идеален. Может быть, тип вывода должен быть более общим IEnumerable (Of String). Возможно, вместо этого переменная time должна быть параметром, чтобы вы могли легко протестировать метод и сделать его истинные зависимости очевидными.

0 голосов
/ 14 мая 2013

чтобы получить годы

  • XX - это название выпадающего списка Dim currentYear As Integer = DateTime.Now.Year For i As Integer = 1980 To currentYear XX.Items.Add(i) Next
0 голосов
/ 09 января 2010

вот вам уродливое решение ...

Public Sub Load_dates(ByRef DDL As System.Web.UI.WebControls.DropDownList)
   dim last as string
   last = ""
    Try
        Dim i As Integer
        Dim j As Integer
        Dim time As DateTime = DateTime.Now
        For i = Now.Year To Now.Year
            For j = 0 To 11
                last = (time.AddMonths(j)).ToString("MMMM")
+ " " + (i.ToString)
                DDL.Items.Add(last)
            Next
        Next
    Catch ex As Exception
        ReportError(ex)
    End Try
    if not last = "" then DDL.Items.Add(last+"+") 
 End Sub

примечание, которое я не проверял, могут быть опечатки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...