|
|||||||
|
|
|
![]() |
|
|
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 14: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 14: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 01:14. |
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 20:32.




















