Este es mi c�digo en el evento valuechanged de un datapickertime. Si intento
declarar el datarow as�: "Dim GastoEncontrado as New DataRow", me da el
error de que no se puede declarar con new porque es "Protected Friend". Si
no lo declaro como new me da el error de "Referencia a objeto no establecida
como instancia de un objeto". �Qu� puede ser?.
Dim GastoEncontrado As DataRow
GastoEncontrado = Nothing
GastoEncontrado = Ds.Tables("gastos").Select("agente=1000")(0)
If IsDBNull(GastoEncontrado) or (gastoencontrado is nothing) Then
LimpiarCamposGastos()
Else
MostrarGasto(Ds.Tables("gastos").Rows.IndexOf(GastoEncontrado))
End If
GastoEncontrado = Nothing
End If
Much�simas gracias
Efectivamente, el constructor de la clase DataRow est� marcado aposta
como "internal" dentro ed su DLL precisamente para que no puedas hacer un
New de la clase DataRow. Cuando quieras un nuevo DataRow, en lugar de hacer
un "New" lo que hay que hacer es pedirle a su DataTable que te devuelva un
nuevo DataRow correctamente configurado para que sus columnas correspondan
con las de la tabla:
Dim GastoEncontrado As DataRow = Ds.Tables("gastos").NewRow()
> Si no lo declaro como new me da el error de
> "Referencia a objeto no establecida como instancia de un objeto". �Qu�
> puede ser?
Sin duda es porque accedes a alg�n objeto que vale Nothing en el momento
de leerlo. No has indicado exactamente d�nde te ocurre ese error. Si
examinas la l�nea correspondiente con el debugger, ver�s que contiene alguna
variable que es Nothing e intentas leerla.
Veo un par de problemas en tu c�digo, pero en principio deber�an darte
otro tipo de error, no el de "referencia no establecida...":
> GastoEncontrado = Ds.Tables("gastos").Select("agente=1000")(0)
Si no existe un registro que tenga "agente=1000" la expresi�n
...Select("agente=1000") te devolver� un array con cero elementos. Si
intentas acceder al primero de los elementos del array poniendo
...Select("agente=1000")(0) te dar� un error de �ndice fuera de rango.
> If IsDBNull(GastoEncontrado) or (gastoencontrado is nothing) Then [...]
Aunque no deber�a de dar error, este "If" no es muy ortodoxo:
IsDBNull(GastoEncontrado) nunca valdr� true, porque la variable
GastoEncontrado nunca puede valer DBNull.Value.