I have a mistake in calculating the hours. The values you see below are taken from a database and my task with C # is to do the sum of the hours.
I list the problems below:
1) Total wrong hours,
2) As you can see in the data grid view there is a time with 9.7 hours but it is impossible that there are 70 minutes in an hour! I place below the C # code and the relative data grid view, can you help me to solve it?
DataGridView Value:
24-07-2018 9:7 08:30
25-07-2018 0:0 08:30
26-07-2018 9:42 08:30
Final sum-> 18:49 1:30
C# Code:
private void buttonCarica_Click(object sender, EventArgs e)
{
dataGridViewPrincipale.Hide();
dataGridViewSecondario.Hide();
resetDataGrid();
string StartDate = dateTimePickerInizio.Value.Date.ToString("dd-MM-yy");
string EndData = dateTimePickerFine.Value.Date.ToString("dd-MM-yy");
Utente utemp = new Utente(comboBoxUtenti.Text);
timemanager tm = new timemanager(utemp);
PeopleController r = new PeopleController(utemp);
DataTable dt = tm.CaricaDataeTotaleHour(StartDate, EndData);
if (dt.Rows.Count == 0)
{
reset();
MessageBox.Show("\n ATTENZIONE: " + comboBoxUtenti.Text + " in questo range di tempo non ha effettuato marcature");
}
else
{
labelTotaleHourWork.Show();
labelTotaleHourWorkMod.Show();
labelTotaleHourtimemanagerMod.Show();
labelTotaletimemanager.Show();
dataGridViewPrincipale.Show();
TimeSpan tempoSpanTotaleHourWork = TimeSpan.Zero;
foreach (DataRow dr in dt.Rows)
{
String TotaleHourWork = r.CaricaHourGiornaliere(dr["Data"].ToString());
if (TotaleHour.Equals("0") == false)
{
TotaleHourWork = TotaleHourWork.Replace(",", ":");
tempoSpanTotaleHourWork = SommaHour(TotaleHourWork, tempoSpanTotaleHourWork);
}
if (tempoSpanTotaleHourWork == TimeSpan.Zero)
{
TotaleHourWork = "0";
}
String[] row = { dr["Data"].ToString(), "" + tm.ConteggioHourGiornaliere(dr["Data"].ToString()), "" + TotaleHourWork };
dataGridViewPrincipale.Rows.Add(row);
}
labelTotaleHourtimemanagerMod.Text = "" + tm.GetTotaleHourRange();
labelTotaleHourWorkMod.Text = "" + CheckValue.ConversioneTimeSpantoString(tempoSpanTotaleHourWork);
}
}
private TimeSpan SommaHour(String t1, TimeSpan t2)
{
t1= TotaleOreCantiere.ToString().Replace(",", ":");
tempoSpanTotaleOreCantiere = tempoSpanTotaleOreCantiere + TimeSpan.Parse(t2);
return tempoSpanTotaleOreCantiere;
}
Function CaricaHourGiornaliere :
public String CaricaHourGiornaliere(String Data)
{
String ret = "0";
DataTable dt = RisorseUmaneModel.CaricaHourGiornaliere(Data);
foreach (DataRow dr in dt.Rows)
{
ret = dr["Ore"].ToString();
}
return ret;
}
--RisorseUmaneModel--
public static DataTable CaricaHourGiornaliere ( String Data)
{
String Query = " SET LANGUAGE 'Italian' SELECT CONVERT(VARCHAR(10), People.Data, 105) as DataIns,''+Utente.Nome+' '+Utente.Cognome as Risorsa,DATENAME(WEEKDAY, People.Data) as Giorno,Cliente.RagioneSociale,Working.NomeWorking,convert(varchar(5), Cast(convert(varchar(5), (OreFine - OreInizio), 108) as datetime) - CAST(REPLACE(Pausa, '.', ':') as datetime), 108) as Ore FROM People inner join Working on Working.IdWorking = People.IdWorking inner join Cliente on Working.IdCliente = Cliente.IdCliente inner join Utente on Utente.IdUtente=People.IdUtente where People.IdUtente = @IdUtente and(People.Data between @Start and @End) order by CONVERT(DateTime, People.Data,101) asc";
SqlCommand cmd = new SqlCommand(Query, conn, tran);
cmd.Parameters.AddWithValue("@IdUtente", SqlDbType.Int).Value = 1;
cmd.Parameters.AddWithValue("@Start", SqlDbType.DateTime).Value = Data;
cmd.Parameters.AddWithValue("@End", SqlDbType.DateTime).Value = Data;
SqlDataAdapter da = new SqlDataAdapter(cmd);
da.Fill(dt);
return dt
}
Function CheckValue.ConversioneTimeSpantoString :
public static String ConversioneTimeSpantoString(TimeSpan tm)
{
return "" + tm.Hours.ToString().Replace("-", "").ToString() + ":" + tm.Minutes.ToString().Replace("-", "").ToString();
}