Ver Mensaje Individual
  #1 (permalink)  
Antiguo 05/08/2011, 01:48
MiGoBi
 
Fecha de Ingreso: mayo-2011
Mensajes: 60
Antigüedad: 13 años, 9 meses
Puntos: 1
Problema con dataset

Hola, estoy intentando hacer un calendario en el cual 1º desactivo todos los días (esto lo hace bien) para luego marcar los días festivos (los obtengo de mi BD) y otros días de otra tabla de mi BD (estos deben estar activos). El problema que tengo es que obtengo este error: System.IndexOutOfRangeException: No se puede encontrar la tabla 0. en esta línea de código: For Each dr As DataRow In dsNoMoved.Tables(0).Rows
* Lo 1º que he hecho es comprobar que las variables de la query tengan valor, reciben el valor correcto.
* Lo 2º ha sido comprobar que la query funciona fuera de código. Funciona y además he provado con los mismo valores que recibiría. Me devuelve valores correctos.
Lo raro de lo que me sucede es que los días festivos me los marca bien pero los otros no, sin embargo estoy utilizando el mismo proceso.
He revisado el código muchas veces y no consigo encontrar el error.
Código:
    '******************************************************************************************
    '*************************************** CALENDARIO ***************************************
    '******************************************************************************************

    Private dsHolidays As DataSet
    Private dsNoMoved As DataSet

    Protected Sub activarcalendario(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnusuariocalendario.Click

        MyCalendar.VisibleDate = Date.Today
        FillHolidayDataset()

    End Sub

    Protected Sub FillHolidayDataset()
        Dim firstDate As New DateTime(MyCalendar.VisibleDate.Year, MyCalendar.VisibleDate.Month, 1)
        Dim lastDate As DateTime = GetFirstDayOfNextMonth()
        Dim today As DateTime = Date.Today
        dsHolidays = GetCurrentMonthData(firstDate, lastDate)
        dsNoMoved = GetCurrentMonthNoMoved(firstDate, today)
    End Sub

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

    Protected Function GetFirstDayOfNextMonth() As DateTime
        Dim monthNumber, yearNumber As Integer
        If MyCalendar.VisibleDate.Month = 12 Then
            monthNumber = 1
            yearNumber = MyCalendar.VisibleDate.Year + 1
        Else
            monthNumber = MyCalendar.VisibleDate.Month + 1
            yearNumber = MyCalendar.VisibleDate.Year
        End If
        Dim lastDate As New DateTime(yearNumber, monthNumber, 1)
        Return lastDate
    End Function

    Function GetCurrentMonthData(ByVal firstDate As DateTime, ByVal lastDate As DateTime) As DataSet

        Dim dsFestivos As New DataSet
        Try
            Dim cs As ConnectionStringSettings
            cs = ConfigurationManager.ConnectionStrings("MiConexion")
            Dim connString As String = cs.ConnectionString
            Dim dbConnection As New SqlConnection(connString)
            Dim queryfestivos As String = "SELECT fecha_fest FROM fechas_festivos WHERE fecha_fest >= @firstDate AND fecha_fest < @lastDate"
            Dim dbCommand As New SqlCommand(queryfestivos, dbConnection)
            dbCommand.Parameters.Add(New SqlParameter("@firstDate", firstDate))
            dbCommand.Parameters.Add(New SqlParameter("@lastDate", lastDate))
            Dim sqlDataAdapter As New SqlDataAdapter(dbCommand)
            sqlDataAdapter.Fill(dsFestivos)

            Me.Label7.Text = lastDate

        Catch ex As Exception
            Me.lblerrorcalendario.Text = ex.ToString
        End Try
        Return dsFestivos
    End Function

    Function GetCurrentMonthNoMoved(ByVal firstDate As DateTime, ByVal today As DateTime) As DataSet

        Dim dsNoMovido As New DataSet
        Dim usuario As String = Me.tbusuariocalendario.Text

        Me.Label5.Text = usuario
        Me.Label6.Text = firstDate
        Me.Label8.Text = today

        Try
            Dim cs As ConnectionStringSettings
            cs = ConfigurationManager.ConnectionStrings("MiConexion")
            Dim connString As String = cs.ConnectionString
            Dim dbConnection As New SqlConnection(connString)
            Dim querynomovido As String = "SELECT no_movido.fecha FROM no_movido, (SELECT id_vehiculo AS id_veh FROM vehiculo_adapt WHERE vehiculo_adapt.usuario = @usuario) WHERE no_movido.fecha >= @firstDate AND no_movido.fecha < @today AND no_movido.id_vehiculo = id_veh"
            Dim dbCommand As New SqlCommand(querynomovido, dbConnection)
            dbCommand.Parameters.Add(New SqlParameter("@usuario", usuario))
            dbCommand.Parameters.Add(New SqlParameter("@firstDate", firstDate))
            dbCommand.Parameters.Add(New SqlParameter("@today", today))
            Dim sqlDataAdapter As New SqlDataAdapter(dbCommand)
            sqlDataAdapter.Fill(dsNoMovido)
        Catch ex As Exception
            Me.lblerrorcalendario.Text = ex.ToString
        End Try
        Return dsNoMovido
    End Function

    Protected Sub Calendar1_DayRender(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.DayRenderEventArgs) Handles MyCalendar.DayRender
        Dim nextDate As DateTime

        'Deshabilitamos todos los días
        If e.Day.IsOtherMonth Or Not e.Day.IsOtherMonth Then
            e.Day.IsSelectable = False
        End If

        'Pintamos los no movidos y los habilitamos
        If Not dsNoMoved Is Nothing Then
            For Each dr As DataRow In dsNoMoved.Tables(0).Rows
                nextDate = CType(dr("fecha"), DateTime)
                If nextDate = e.Day.Date Then
                    e.Cell.BackColor = System.Drawing.Color.CornflowerBlue
                    e.Day.IsSelectable = True
                End If
            Next
        End If

        'Pintamos los festivos
        If Not dsHolidays Is Nothing Then
            For Each dr As DataRow In dsHolidays.Tables(0).Rows
                nextDate = CType(dr("fecha_fest"), DateTime)
                If nextDate = e.Day.Date Then
                    e.Cell.BackColor = System.Drawing.Color.Tomato
                End If
            Next
        End If

    End Sub
Espero que me puedan ayudar ya que llevo un par de días con esto y no puedo perder más tiempo. Muchas gracias.