
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!
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


0