9 messaggi dal 05 luglio 2012
Ciao, sono di nuovo qua per altro problema.
Ho un'applicazione in ASP.NET 2.0 fatta in VB che quando richiamo una pagina mi deve andare a popolare delle dropdown facendo delle query a un DB e caricarmi circa 8 mila record per ogni dropdown.Il fatto è che il caricamento della pagina diventa lungo.
Ho provato a crearmi una funzione per istanziare un altro thread da fare lavorare in background e che andasse a popolarmi le dropdown in modo da visualizzare subito la pagina e nel mentre che l'utente inserisce i dati, finisse di caricare.
Mi da questo errore :
Errore lettura carrozzeria:La connessione non è stata chiusa. Lo stato attuale della connessione è aperto.

Questa è la sub che mi popola la dropdown :

Protected Sub ddid_carrozzeria_Load()
Qry = "SELECT id, ragionesociale, provincia FROM t_carrozzerie"
Qry += " WHERE cancellato = 0"
Qry += " AND id_agente IN(" & ViewState("struttura") & ")" '- ID filtrati in base a struttura
Qry += " ORDER BY ragionesociale"
Cmd = New SqlCommand(Qry, Conn)
Dr = Nothing
Try
Conn.Open()
Dr = Cmd.ExecuteReader(CommandBehavior.CloseConnection)

If Dr.HasRows Then
ddid_carrozzeria.DataSource = Dr
ddid_carrozzeria.DataTextFields = "id,ragionesociale,provincia"
ddid_carrozzeria.DataTextFormatString = "[{0:000}] {1} ({2})"
ddid_carrozzeria.DataValueField = "id"
ddid_carrozzeria.DataBind()
' -- Aggiungo un elemento nullo iniziale
ddid_carrozzeria.Items.Insert(0, New ListItem("Seleziona...", "0"))
Else
ddid_carrozzeria.Items.Clear()
ddid_carrozzeria.Items.Insert(0, New ListItem("- Archivio vuoto -", "0"))
ddid_carrozzeria.Items.Insert(1, New ListItem("", "0"))
End If

If Not Dr.IsClosed Then Dr.Close()
Catch exc As System.Exception
lmessage.Text += "<br />Errore lettura carrozzeria:" & exc.Message.ToString()
Finally
Conn.Close()
End Try
End Sub

e questa è la funzione che mi richiamo al caricamento della pagina per creare un nuovo thread :

Protected Sub nuovothread()

Dim isCompleted As Boolean = False
Try
Dim thread As New Thread(AddressOf ddid_carrozzeria_Load)
thread.Start()' questo metodo ritorna immediatamente
Finally
isCompleted = True
End Try
End Sub

Riuscireste a mettermi sulla giusta strada?
Grazie e buone Feste a tutti.
Non ho provato ma prova a togliere: CommandBehavior.CloseConnection
Nel leggere il tuo post mi sono fermato alle prime righe: una dropdownlist non è adatta a contenere 8000 righe e anche se passassi a un controllo javascript che si comporta allo stesso modo, te lo sconsiglierei vivamente. Una dropdownlist dovrebbe contenere esageratamente 50 elementi. Che ne dici di un autocompletamento? Oppure di crearti un controllo con "un textbox in sola lettura + un pulsante immagine con una lentina" che apre un'altra pagina dove è presente una gridview, magari con un piccolo filtro in alto, che ti permette di scegliere il tuo record e poi riportarlo nella textbox in sola lettura?

Ormai programmano tutti... ma la professionalità appartiene a pochi

Torna al forum | Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.