Visual Basic.NET - Evitar que se destruya una clase

   
Vista:

Evitar que se destruya una clase

Publicado por Angel (24 intervenciones) el 23/06/2014 16:57:21
Que tal amigos!! tengo un problema y agradeceria su ayuda
resulta que tengo una clase publica con la cual creo mis propios comboBox es decir
personalizo los existentes( los extiendo)
todo funciona bien, las nuevas propiedas y todo trabaja como deberia pero al momento de implementarlos me encuentro con que la clase donde los he extendido se destruye y no entiendo porque.

les explico lo que sucede es que no quiero consultar constantemente mi base de datos para saber como deben de presentarse los items de el ComboBox entonces cree una propiedad que contiene todos los resultados demi consulta sql y luego los filtra segun como yo le indique asi me evito consultar constantemente la BD.

Imports System.ComponentModel
Public Class HiperComboBox
Inherits ComboBox 'Heredo Textbox
Enum FromStatus
Initializing
LoadingRecord
CapturingNew
ShowingExistent
EditingExistent
End Enum
public enuFormStatus As FromStatus 'PROPIEDAD ENUMERADA HIPER COMBOBOX
Friend dttSQL As New DataTable 'DataTable HiperComboBox

Public Property Status() As FromStatus
Get
Return enuFormStatus
End Get
Set(ByVal value As FromStatus)
enuFormStatus = value
End Set

End Property
'INICIANDO DATA TABLE DEL HIPER COMBOBOX
Public Function Inicializar(ByRef strSQL As String, ByRef strODBC As String) As Boolean
Dim hcbStatus As New HiperComboBox 'VARIABLE QUE PERMITE SABER EL ESTADO DEL FORMULARIO
Dim intStatus As Integer = Me.Status ' Con Esto Se el Estado Del Formulario

Using Connection As New Odbc.OdbcConnection("provider=ODBC;DSN=" & strODBC & ";")
Dim dadDatosConsultados As New Odbc.OdbcDataAdapter(strSQL, Connection)

Try
Connection.Open()
dttSQL.Clear() 'Limpio el Data Table antes de utilizarlo
dadDatosConsultados.Fill(dttSQL)

If Filter(intStatus, dttSQL) Then
Return True
End If
Catch ex As Exception
Return False
End Try
End Using
End Function

Friend Function Filter(ByVal intStatus As Integer, ByVal dttSQL As DataTable) As Boolean
Dim drwSQL() As DataRow

Me.Items.Clear()

Select Case intStatus
Case 0, 1
dttSQL.PrimaryKey = New DataColumn() {dttSQL.Columns("Id"), dttSQL.Columns("Status")}
drwSQL = dttSQL.Select("Status=0 OR Status=1")
For Each drwItem As DataRow In drwSQL
'MsgBox(drwItem.Item("Nombres") & " " & drwItem.Item("Apellidos"))
Me.Items.Add(drwItem.Item("Nombre"))
Next
Case 2, 3, 4 'CAPTURING NEW
dttSQL.PrimaryKey = New DataColumn() {dttSQL.Columns("Id"), dttSQL.Columns("Status")}
drwSQL = dttSQL.Select("Status=1")
For Each drwItem As DataRow In drwSQL
'MsgBox(drwItem.Item("Nombres") & " " & drwItem.Item("Apellidos"))
Me.Items.Add(drwItem.Item("Nombre"))
Next

Case Else
Return False
End Select
Return True
End Function

Public Property UpdatingStatus() As FromStatus 'ACTUALIZA EL STATUS DEL FORMULARIO Y EJECUTA EL METODO FILTER
Get

End Get
Set(ByVal value As FromStatus)
Me.Status = value
If dttSQL.Columns.Count > 0 Then Filter(value, dttSQL)
End Set
End Property

Public Function getsqlValue(ByRef strText As String) As String

Dim drwSQL() As DataRow
dttSQL.PrimaryKey = New DataColumn() {dttSQL.Columns("Id"), dttSQL.Columns("Status")}
drwSQL = dttSQL.Select("Status=0 OR Status=1")
For Each drwItem As DataRow In drwSQL
If drwItem.Item("Nombre") = strText Then Return (drwItem.Item("Id"))

Next
End Function
End Class


Esta es la Clase que les comento y cuando la utilizo lo hago de esta forma:

frmCotizaciones.hcbCliente.Inicializar("SELECT `Id` AS `Id`,`Nombre` AS `Nombre`,`Estatus` AS `Status` FROM `Clientes`;", strODBC)

tengo varios formularios y esto lo hago en el formulario de inicio de sesión y todo bien si abro el formulario Cotizaciones los ComboBox ya se encuentran llenos pero si cierro el form y lo abro de nuevo estos se vacian y no es lo que deseo porque por eso los llene mucho antes de que haber habierto por primera vez el frmCotizaciones.

Alguno de uds sabe como solucionarlo?? se los agradeceria bastante!
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

Evitar que se destruya una clase

Publicado por Pico (168 intervenciones) el 23/06/2014 20:34:51
La variable de HiperComboBox está en el form. Cuando cierras el form el recolector de basurillas destruye todo lo que haya en ese form. Si quieres que perdure sácalo de ese form, ponlo en un sitio que no cierres.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar