|
|
|
![]() |
|
Strumenti |
![]() |
#1 |
Senior Member
Iscritto dal: Sep 2004
Messaggi: 3967
|
[concettuale]scrittura di un metodo
Ciao a tutti
![]() Avrei da risolvere un problemuccio che però credo di non riuscire ad inquadrare. Su un'ipotetica griglia, ho 5 celle; La quinta cella deve darmi un risultato che è la differenza di alcuni valori. Le mie possibili condizioni sono: 1) Ho solo le prime due celle che contengono un valore e quindi la quinta cella deve darmi la differenza di: cella2 - cella1 2) Ho solo la terza e quarta cella che contengono un valore e quindi la quinta cella deve darmi la differenza di: cella4 - cella1 3) Ho tutte e quattro le celle che contengono un valore e quindi la quinta cella deve darmi: (cella2 - cella1) + (cella4 - cella3) Questo problema l'ho risolto con una serie infinita di "if - else", ma non mi piace assolutamente. Dato che è un'operazione che devo svolgere spesso su questo programma, intuisco che devo astrarre il concetto in maniera migliore. Come posso fare? Grazie mille. RaouL.
__________________
Dai wafer di silicio nasce: LoHacker... il primo biscotto Geek ![]() |
![]() |
![]() |
![]() |
#2 | |
Senior Member
Iscritto dal: Feb 2002
Messaggi: 906
|
Quote:
bool ok=false; a=0 for i=0 i<5 i++ if(cella[i]>0) a++; if(a==4) ok=true;//hai tutte le 4 celle con un valore quindi calcoli if(ok){ cella[5]=(cella2 - cella1) + (cella4 - cella3) }else{ for i=0 i<5 i++ for j=i+1; <5 i++ if(cella[j]>0 && cella[i]>0) cella[5]=cella[j]-cella[i]; } perlomeno per quanto hai scritto... un'appunto è che sull'else cella[5] viene sovrascritto... per ora!... se i valori di cella i e j sono >0 |
|
![]() |
![]() |
![]() |
#3 |
Senior Member
Iscritto dal: Sep 2004
Messaggi: 3967
|
più o meno corrisponde all'idea che mi ero fatto, solo che non so perchè non mi convince
![]() Attualmente ho abbozzato così: Codice:
private void GetTotal(MyGridCellEventArgs e) { DateTime dt1, dt2, dt3, dt4; bool b1, b2, b3, b4; //prima condizione, le prime due celle contengono un valore e le altre no if(grid.Rows[e.RowIndex].Cells[0].Value != null && grid.Rows[e.RowIndex].Cells[1].Value != null) { b1 = DateTime.TryParse(grid.Rows[e.RowIndex].Cells[0].Value.ToString(), out dt1); b2 = DateTime.TryParse(grid.Rows[e.RowIndex].Cells[1].Value.ToString(), out dt2); TimeSpan ts = dt2.SubTract(dt1); grid.Rows[e.RowIndex].Cells[4].Value = ts.ToString(); } //seconda condizione: solo la terza e quarta cella contengono un valore if(grid.Rows[e.RowIndex].Cells[2].Vale != null && grid.Rows[e.RowIndex].Cells[3].Value != null) { b3 = .... b4 = .... TimeSpan ts = ..... } //terza condizione: tutte e quattro le celle contengono un valore { b1 = .... out dt1; b2 = .... out dt2; b3 = .... out dt3; b4 = .... out dt4; TimeSpan ts1 = dt2 - dt1; TimeSpan ts2 = dt4 - dt3; TimeSpan total = ts2 + ts1; } //end of horror code pretty candidate to the daily wtf
__________________
Dai wafer di silicio nasce: LoHacker... il primo biscotto Geek ![]() |
![]() |
![]() |
![]() |
#4 |
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Fai un metodo che ti fa la differenza fra due celle:
Codice:
TimeSpan GetSubTotal(MyGridCellEventArgs e, int first, int second) { DateTime dt1, dt2; if(grid.Rows[e.RowIndex].Cells[first].Value == null || grid.Rows[e.RowIndex].Cells[second].Value == null) return new TimeSpan(0); //non so come esprimerlo, ritorna un time span in cui la differenza è zero DateTime.TryParse(grid.Rows[e.RowIndex].Cells[first].Value.ToString(), out dt1); DateTime.TryParse(grid.Rows[e.RowIndex].Cells[second].Value.ToString(), out dt2); return dt2.SubTract(dt1); } private void GetTotal(MyGridCellEventArgs e) { TimeSpan total = GetSubTotal(e, 0, 1) + GetSubTotal(e, 2, 3); grid.Rows[e.RowIndex].Cells[4].Value = ts.ToString(); } Ultima modifica di cionci : 21-04-2007 alle 13:48. |
![]() |
![]() |
![]() |
#5 |
Senior Member
Iscritto dal: Sep 2004
Messaggi: 3967
|
Ecco, questo si che significa leggere nel pensiero !
![]() Si, credo che come concetto sia esattamente ciò che cercavo ! Grazie mille ![]() RaouL.
__________________
Dai wafer di silicio nasce: LoHacker... il primo biscotto Geek ![]() |
![]() |
![]() |
![]() |
#6 |
Senior Member
Iscritto dal: Dec 2002
Messaggi: 3359
|
Ma se fai un metodo per leggere il valore della cella e uno per farne il totale non fai prima?:
Codice:
int getCellValue(int n){ int value=grid.Rows[e.RowIndex].Cells[n].Vale if(value!=null) return value; else return 0; } int doCalc(int cell1, int cell2, int cell3, int cell4){ return (cell2-cell1)+(cell4-cell3); } Corrisponde a quello che hai detto. |
![]() |
![]() |
![]() |
#7 |
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Avevo lasciato due !=
![]() E' una specie di NullObject pattern ![]() Ultima modifica di cionci : 21-04-2007 alle 13:57. |
![]() |
![]() |
![]() |
#8 |
Senior Member
Iscritto dal: Dec 2002
Messaggi: 3359
|
C'è qualcosa che mi sfugge...io non vedo la difficoltà mi sa.
|
![]() |
![]() |
![]() |
#9 |
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
|
![]() |
![]() |
![]() |
#10 |
Senior Member
Iscritto dal: Dec 2002
Messaggi: 3359
|
aaaaaa ecco
|
![]() |
![]() |
![]() |
#11 | |
Senior Member
Iscritto dal: Sep 2004
Messaggi: 3967
|
Quote:
Il fatto è che i valori che ho sono di tipo DateTime e per fare le differenze o addizioni necessito di un oggetto di tipo TimeSpan, il quale, non ammette lo stesso tipo di aritmetica dei tipi classici.
__________________
Dai wafer di silicio nasce: LoHacker... il primo biscotto Geek ![]() |
|
![]() |
![]() |
![]() |
#12 |
Senior Member
Iscritto dal: Dec 2002
Messaggi: 3359
|
Sisi ho capito, magari se lo specificavi anche nel primo post lo capivo prima
![]() |
![]() |
![]() |
![]() |
#13 | |
Senior Member
Iscritto dal: Sep 2004
Messaggi: 3967
|
Quote:
![]() ![]()
__________________
Dai wafer di silicio nasce: LoHacker... il primo biscotto Geek ![]() |
|
![]() |
![]() |
![]() |
#14 |
Senior Member
Iscritto dal: Dec 2002
Messaggi: 3359
|
|
![]() |
![]() |
![]() |
#15 |
Senior Member
Iscritto dal: Jul 2002
Città: Reggio Calabria -> London
Messaggi: 12112
|
EDIT
non avevo capito una mazza ![]()
__________________
![]() Ultima modifica di ^TiGeRShArK^ : 22-04-2007 alle 00:14. |
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 04:26.