Buenas!
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:
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
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.".
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