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