Tengo una aplicación en la que tengo un TableAdapter que lee los datos de la tabla y llena un DataSet Tipado. En la aplicación tengo una página, tipo DetailsView, desde la que puedes editar los datos de un registro concreto o dar de alta un nuevo registro.
Mi problema está a la hora de editar y llenar los campos de tipo smallDateTime de la BD: en algunas ocasiones puede que antes tuvieran un valor y ahora necesito quitárselo y asignarle Null, ¡¡pero no encuentro la forma!! ¿alguna idea o ayuda?
Os pongo el código a continuación para que podáis ver cómo lo hago y ver si os ayuda para decirme algo.
Código:
Tal como os lo pongo me da error tanto al insertar como al editar, por estar forzando el valor de FechaEntrada. Al ponerlo tal como está se produce el error: "Desbordamiento de SqlDateTime. Debe estar entre 1/1/1753 12:00:00 AM y 12/31/9999 11:59:59 PM.".Imports System.Data
Partial Class dlpm_rI_Det
Inherits System.Web.UI.Page
Private dsRInd As dsP.P_RIDataTable
Private taRInd As dsPTableAdapters.P_RITableAdapter
Private fila As dsP.P_RIRow
Private intIdRI As Int32
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
If Request.Params("IdRI") <> "" Then Me.intIdRI = Request.Params("IdRI")
Me.dsRInd = New dsP.P_RIDataTable
Me.taRInd = New dsPTableAdapters.P_RITableAdapter
Me.dsRInd = Me.taRInd.GetAllRI()
If Not IsPostBack Then
'Seleccionamos la fecha de hoy en los combos de fecha.
Me.cboDia.SelectedValue = Today.Day.ToString.PadLeft(2, "0")
Me.cboMes.SelectedValue = Today.Month.ToString.PadLeft(2, "0")
Me.cboAnio.SelectedValue = Today.Year.ToString()
If Me.intIdRI <> 0 Then CargaDatos()
End If
End Sub
Private Sub CargaDatos()
Dim faux As DateTime
'Enlaza a los datos para buscar el pasado en los parámetros.
fila = Me.dsRInd.FindByidRI(Me.intIdRI)
Me.txtNR.Text = fila.NR
'Los valores nulos lanzan una excepción, hay que controlarla para seguir adelante.
'Albarán
Try
Me.txtAlbaran.Text = fila.AlbaranEntrada
Catch ex As Exception
Me.txtAlbaran.Text = ""
End Try
Try
'FechaEntrada siempre tendrá un valor
faux = fila.FechaEntrada
Me.cboDia.SelectedValue = faux.Day.ToString.PadLeft(2, "0")
Me.cboMes.SelectedValue = faux.Month.ToString.PadLeft(2, "0")
Me.cboAnio.SelectedValue = faux.Year.ToString()
Catch
Me.cboDia.SelectedIndex = -1
Me.cboMes.SelectedIndex = -1
Me.cboAnio.SelectedIndex = -1
End Try
'EstadoUso siempre tendrá un valor
Me.cboEstado.SelectedValue = fila.EstadoUso
End Sub
Protected Sub bGuardar_Click(ByVal sender As Object, ByVal e As System.Web.UI.ImageClickEventArgs) Handles bGuardar.Click
If intIdRI = 0 Then
fila = Me.dsRInd.NewRow()
Else
fila = Me.dsRInd.FindByidRecursoIndividual(Me.intIdRI)
End If
fila.NR = Me.txtNR.Text.Trim()
If Me.txtAlbaran.Text.Trim() <> "" Then fila.AlbaranEntrada = Me.txtAlbaran.Text.Trim() Else fila.AlbaranEntrada = Nothing
fila.FechaEntrada = Nothing
fila.EstadoUso = Me.cboEstado.SelectedValue()
If intIdRI = 0 Then Me.dsRInd.Rows.Add(fila)
Me.taRInd.Update(Me.dsRInd)
CargaDatos()
End Sub
End Class
Evidentemente al ser tipado no puedo igualarlo a DBNull.Value, porque ya da error de compilación al no poder convertir éste valor en uno de tipo DateTime.
Espero vuestra ayuda.
Muchas gracias.
Un saludo

