Tempo attesa visualizzazione combobox

giovedì 08 novembre 2012 - 10.46
Tag Elenco Tags  C#  |  Visual Studio 2005

AntCiar Profilo | Expert

Salve a tutti.

Ho il seguente problema:

in una form 'F2' ho una combo box a cui viene passato un datatable e associato alla proprietà DataSource. La combo poi visualizza i record valorizzando anche DisplayMember e ValueMember. Questa tabella ha numerosi record.

Dalla form principale sulla pressione di un bottone istanzio la F2, passo la tabella alla combo e apro la F2 in showdialog. Questo (showdialog) inpiega un tempo T alquanto lungo prima di visualizzare la form.
Per cercare risparmiare tempo, visto che più volte l'utente preme il bottone, ho stutturato la cosa in questo modo:

1 - dichiaro la F2 a livello globale nella form e la inizializzo con valore Null.

2 - alla pressione del bottone controllo se la variabile di F2 è nulla. Solo se è nulla, la inizializzo con una istanza di F2 e gli passo la tabella alla combo, altrimenti apro la F2 in showDialog. In uscita dallo ShowDialog imposto la F2 con Visible = false (non distruggo l'oggetto)

Nonstante questo ho potuto notare che il tempo viene perso quando si fa lo ShowDialog e non quando si passa la tabella alla form. In qualche modo ad ogni showDialog è come se la combo "ridisegnasse" tutti i rows al suo interno. Visto che dal punto di vista dei dati i valori nella combo sono sempre gli stessi ad ogni apertura della F2, è possibile "evitare" in qualche modo il ridisegno automatico delle righe in modo da velocizzare il tutto in fase di ShowDialog?

Grazie
Cristian Barca

ridaria Profilo | Expert

>Ho il seguente problema:
>
>in una form 'F2' ho una combo box a cui viene passato un datatable
>e associato alla proprietà DataSource. La combo poi visualizza
>i record valorizzando anche DisplayMember e ValueMember. Questa
>tabella ha numerosi record.
>
>Dalla form principale sulla pressione di un bottone istanzio
>la F2, passo la tabella alla combo e apro la F2 in showdialog.
>Questo (showdialog) inpiega un tempo T alquanto lungo prima di
>visualizzare la form.
>Per cercare risparmiare tempo, visto che più volte l'utente preme
>il bottone, ho stutturato la cosa in questo modo:
>
>1 - dichiaro la F2 a livello globale nella form e la inizializzo
>con valore Null.
>
>2 - alla pressione del bottone controllo se la variabile di F2
>è nulla. Solo se è nulla, la inizializzo con una istanza di F2
>e gli passo la tabella alla combo, altrimenti apro la F2 in showDialog.
>In uscita dallo ShowDialog imposto la F2 con Visible = false
>(non distruggo l'oggetto)
>
>Nonstante questo ho potuto notare che il tempo viene perso quando
>si fa lo ShowDialog e non quando si passa la tabella alla form.
>In qualche modo ad ogni showDialog è come se la combo "ridisegnasse"
>tutti i rows al suo interno. Visto che dal punto di vista dei
>dati i valori nella combo sono sempre gli stessi ad ogni apertura
>della F2, è possibile "evitare" in qualche modo il ridisegno
>automatico delle righe in modo da velocizzare il tutto in fase
>di ShowDialog?

......

credo che tu possa semplicemente: all'evento load della F2, verificare
se combo.Items.Count <= 0 then
carica comboBox con datatable ecc....
fine se

se la combo è piena non la carichi altrimenti lui la carica sempre

Io spesso ho usato questa tecnica

CIAO
fammi sapere

PS MA SEI DI BENEVENTO??????

Riccardo D'Aria

AntCiar Profilo | Expert

ciao.

Già provato questa soluzione ma è sempre la stessa cosa.
In pratica quando la form che contiene la combo deve essere visualizzata, l'oggetto combo in automatico ridisegna ogni riga al suo interno indipendentemente se gli hai "rivalorizzato" il datasource oppure no.
Cristian Barca

AntCiar Profilo | Expert

ho visto ora la parte finale del tuo msg.

Si sono di BN.
Cristian Barca

ridaria Profilo | Expert

non fargli allora lo showDialog!

dagli una sorta di visible true se se lo fa fare.

Oppure un'altra soluzione potrebbe essere:

Metti i controlli della F2 in un panel che rendi visible true o false a seconda dei casi.


Ciò è fattibile se la f2 viene aperta da una sola Form ex F1
Il panel a questo punto è un controllo di F1 la combo viene caricata una sola volta, e ad ogni apertura del panel il sistema non ridisegna la combo perchè lei è sempre stata lì. :-)

Simuli la form con un panel!

Io uso spesso questa tecnica, se una maschera viene aperta da una sola form la creo con un panel.

Fammi sapere

ps sei su FB?






Riccardo D'Aria

AntCiar Profilo | Expert

>non fargli allora lo showDialog!
>
>dagli una sorta di visible true se se lo fa fare.

Si avevo pensato a questa soluzione ma data la complessità della form chiamante (F1) mi comporta un casino di controlli e enabled da dover gestire. Utilizzavo lo showDialog perchè l'utene alla pressione del bottone deve scegliere dei dati (dalla combo) e poi impostarne altri. Al termine se conferma questi vengono processati dalla F1. Con lo ShowDialog stavo tranquillo che nel frattempo la F2 è aperta l'utente non può fare niente nella F1.

>Oppure un'altra soluzione potrebbe essere:
>
>Metti i controlli della F2 in un panel che rendi visible true
>o false a seconda dei casi.
>
>
>Ciò è fattibile se la f2 viene aperta da una sola Form ex F1
>Il panel a questo punto è un controllo di F1 la combo viene caricata
>una sola volta, e ad ogni apertura del panel il sistema non ridisegna
>la combo perchè lei è sempre stata lì. :-)
>
>Simuli la form con un panel!
>
>Io uso spesso questa tecnica, se una maschera viene aperta da
>una sola form la creo con un panel.
>
>Fammi sapere
>
>ps sei su FB?
yes.
>
>
>
>
>
>Riccardo D'Aria

Cristian Barca

ridaria Profilo | Expert

se metti tutti i controlli della f1 in ungroupBox dovrai solo fare l'enabled della group box alla visualizzazione del panel F2.

Oppure un loop for each ctl in form tipo questo con i dovuti accorgimenti e disabiliti ed abiliti in un botto

For Each ctl As Control In me.Controls
If TypeOf ctl Is RadioButton Then
Dim rb As RadioButton = ctl

If rb.Checked = True Then
listinoPrecSelezionato = rb.Tag.ToString
Exit For
End If
End If

Next

ok

ciao
ti ho chiesto l'amicizia su fb.

mi farebbe piacere, visto che di programmatori a BN ne conosco quasi ZERo :-)


Riccardo D'Aria

AntCiar Profilo | Expert

>se metti tutti i controlli della f1 in ungroupBox dovrai solo
>fare l'enabled della group box alla visualizzazione del panel
>F2.
>
>Oppure un loop for each ctl in form tipo questo con i dovuti
>accorgimenti e disabiliti ed abiliti in un botto
>
> For Each ctl As Control In me.Controls
> If TypeOf ctl Is RadioButton Then
> Dim rb As RadioButton = ctl
>
> If rb.Checked = True Then
> listinoPrecSelezionato = rb.Tag.ToString
> Exit For
> End If
> End If
>
> Next
>
>ok


Vedo un po come fare.
per ora non accetto ancora la risposta così attendo se qualcuno ha già avuto il problema e lo ha risolto in altro modo.


>ciao
>ti ho chiesto l'amicizia su fb.
>
>mi farebbe piacere, visto che di programmatori a BN ne conosco
>quasi ZERo :-)

OK. Non appena riusciro ad aprire facebook (di solito mi capita di poterlo fare 1 volta ogni 2 settimane circa) ti accetto l'amicizia


>
>
>Riccardo D'Aria

Cristian Barca
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2017
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5