Что касается второй части вашего вопроса, вы можете увидеть в этом посте , как выделить указанные дни, хотя и с использованием синтаксиса C #.
Я собираюсь предположить, чтоФормат L2S используется для получения дат на данный момент (прокомментируйте с фактической реализацией, если вам нужна более подробная информация).
Я бы порекомендовал даты, которые вы хотите выбрать, хранить в переменной в форме (вместо области действия функции), чтобы предотвратить выполнение запросов к базе данных каждый день.Имея это в виду, вот пример кода (от руки, поэтому, пожалуйста, извините и прокомментируйте основные / тревожные проблемы синтаксиса):
Private DatesToHighlight As IEnumerable(Of Date)
' implementation details provided so commented this bit out, see EDIT below
'Protected Sub PopulateDatesToHighlight()
' DatesToHighlight = db.SomeTable.Select(Function(n) n.MyDateField)
'End Sub
Protected Sub DayRenderer(ByVal object As Sender, ByVal e As DayRenderEventArgs)
If DatesToHighlight.Contains(e.Day.Date) Then
e.Cell.BackColor = System.Drawing.Color.Red
End If
End Sub
Как указано в связанном вопросе, вы будетенеобходимо изменить разметку для элемента управления календаря, чтобы обеспечить параметр ondayrender
следующим образом: ondayrender="DayRenderer"
Относительно изменения дат в массиве, это зависит от того, в каком формате они находятся в начале.Если что-то наследует от IEnumerable, вы можете использовать ToArray () .Если они просто переменные, вы можете инициализировать массив с датами
Dim myDates() As Date = {dateVar1, dateVar2}
Надеюсь, что это поможет?
РЕДАКТИРОВАТЬ: (В ответ на добавление кода OP)
Toполучить из вашего устройства чтения данных в массив (хотя я не уверен, что вам нужно массив) я бы сделал следующее:
' using the variable I declared earlier
DatesToHighlight = New IEnumerable(Of Date)
If reader.HasRows Then
Dim parsedDate As Date
While reader.Read()
If Date.TryParse(reader(0), parsedDate) Then
DatesToHighlight.Add(parsedDate)
End If
End While
End If
Dim myArrayOfDates() As Date = DatesToHighlight.ToArray()