se non sei ancora riuscito di invio il mio codice che ho scopiazzato qua e là forse non serve tutto, ed è da sistemare (cosa che devo ancora fare) però ti da qualche indicazione

Il mio colora di rosso tutte le scadenze

Protected Sub Page_Load(ByVal sender As Object, _
ByVal e As System.EventArgs) Handles Me.Load
If Not IsPostBack Then
Calendar1.VisibleDate = DateTime.Today
FillScadenzeDataset()
End If
End Sub

Protected Sub FillScadenzeDataset() 'deve riempire il dataset con i dati
Dim firstDate As New DateTime(Calendar1.VisibleDate.Year, _
Calendar1.VisibleDate.Month, 1) 'ottenere la prima data è facile però in formato americano
'firstDate = formatDateTimeDb(firstDate) 'converto la data nel formato italiano
Dim lastDate As DateTime = GetFirstDayOfNextMonth() 'ottenere la prima data del mese successivo bisogna fare qualche lavoro
'lastDate = formatDateTimeDb(lastDate) 'converto la data nel formato italiano
dsScadenze = GetCurrentMonthData(firstDate, lastDate) 'ottiene il dataset
End Sub

Protected Function GetFirstDayOfNextMonth() As DateTime 'la prima data del prossimo mese
Dim monthNumber, yearNumber As Integer
If Calendar1.VisibleDate.Month = 12 Then 'se siamo a dicembra allora il mese è gennaio
monthNumber = 1
yearNumber = Calendar1.VisibleDate.Year + 1
Else 'altrimenti siamo a mese corrente +1
monthNumber = Calendar1.VisibleDate.Month + 1
yearNumber = Calendar1.VisibleDate.Year
End If
Dim lastDate As New DateTime(yearNumber, monthNumber, 1) 'datetime compone la dat ma in formato americano
Return lastDate
End Function

Protected Sub Calendar1_VisibleMonthChanged(ByVal sender As Object, _
ByVal e As System.Web.UI.WebControls.MonthChangedEventArgs) _
Handles Calendar1.VisibleMonthChanged
FillScadenzeDataset()
End Sub

Function GetCurrentMonthData(ByVal firstDate As DateTime, ByVal lastDate As DateTime) As DataTable
Dim MyConnection As OleDbConnection
Dim MyCommand As OleDbCommand


'Collegamento con il database
MyConnection = New OleDb.OleDbConnection("Provider=Microsoft.Jet.OLED B.4.0;Data Source=C:\Documents and Settings\06109\Desktop\Antincendio.mdb")


'creazione del comando
MyCommand = New OleDbCommand()
MyCommand.CommandText = " SELECT t9.id_verifica, t9.id_presidio, t9.descrizione, t9.ultimoControllo, t9.cadenza, (DateAdd(" & Chr(34) & "m" & Chr(34) & ",[t9]![cadenza],[t9]![ultimoControllo])) AS prossimoControllo FROM t9;" ' WHERE ((((DateAdd(" & Chr(34) & "m" & Chr(34) & ",[t9]![cadenza],[t9]![ultimoControllo])))>@firstDate And ((DateAdd(" & Chr(34) & "m" & Chr(34) & ",[t9]![cadenza],[t9]![ultimoControllo])))<@lastDate));"

MyCommand.CommandType = CommandType.Text
MyCommand.Connection = MyConnection

'MyCommand.Parameters.AddWithValue("@firstDate", firstDate)
'MyCommand.Parameters.AddWithValue("@lastDate", lastDate)

Dim myAdapter As New OleDbDataAdapter(MyCommand) 'crea un dataAdapter
Dim dsMonth As DataTable = New DataTable()

myAdapter.SelectCommand = MyCommand
Try
myAdapter.Fill(dsMonth) 'riempie il dataSet con i dati ottenuti dalla query
Catch
End Try
Return dsMonth 'ritorna il datatset