TravoniMedlem sedan okt. 20041 556 inlägg Jag har en property (SId) och en parameter som skall hämta värdet. Men kruxet är att databasen skall "spara" ett null-värde om SId inte innehåller något och i mitt fall så sparas 0 [En nolla] i databasen.
Public Property SId() As Integer
Get
If Not IsNothing(ViewState("SId")) Then Return CType(ViewState("SId"), Integer)
Return Nothing
End Get
Set(ByVal value As Integer)
ViewState("SId") = value
End Set
End Property
' Mer kod ...
command.Parameters.Add("?sId", MySqlDbType.Int32).Value = sId
Vad är fel?
spangoMedlem sedan juni 20008 205 inlägg Gör om SId till Nullable(Of Integer) istället för Integer? Integer är en value type och har således aldrig nullvärde.
TravoniMedlem sedan okt. 20041 556 inlägg Härligt!
Visste inte att det fanns något som hette Nullable()
TravoniMedlem sedan okt. 20041 556 inlägg ... följdfråga.
Eftersom att den fetmarkerade raden kan vara DBNull så funkar det inte med Integer.
Om jag kör med rad 1, så får jag typcastingfel.
Rad 2 fungerar med det känns lite fel...
Rad 1
Dim ParentId As Nullable(Of Integer) = [B]DataBinder.Eval(e.Item.DataItem, "ParentId")[/B]
Rad 2
Dim ParentId As Object = DataBinder.Eval(e.Item.DataItem, "ParentId")
spangoMedlem sedan juni 20008 205 inlägg Ja, Nullable(Of Integer) är en helt annan datastruktur än Integer, så det är förklarligt att det inte går att casta om Eval returnerar en boxad Integer. (Nullable är bara en generisk struct som är lite fiffigt uppbyggd, kolla dokumentationen.) Jag har dålig pejl på hur DataBinder.Eval funkar, men kan du inte göra om ParentId till Nullable också? Annars får du göra nåt i stil med detta (som en övning får du det i C#):
public static Nullable<T> EvalNullable<T>(object container, string expression) where T : struct {
object value = DataBinder.Eval(container, expression);
if (value == null) return null;
else return new Nullable<T>((T)value);
}
TravoniMedlem sedan okt. 20041 556 inlägg Oki, tack vad bussigt:
Public Shared Function EvalNullable(Of T As Structure)(ByVal container As Object, ByVal expression As String) As Nullable(Of T)
Dim value As Object = DataBinder.Eval(container, expression)
If value Is Nothing Then
Return Nothing
Else
Return New Nullable(Of T)(DirectCast(value, T))
End If
End Function
Nåt sånt hära kanske då.