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
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")
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);
}
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å.
125 ms totalt · 3 externa anrop · v20260731065814-full.4bcf49fe