Mam problem ze zmianą koloru wiersza w DataGridView. Napisałem funkcję w MySql-u, która sprawdza dla wskazanego id-a ile godzin minęło zostało wprowadzonych między dwiema datami określonymi przez datapicker (ustawiony short format)
CREATE DEFINER=`test`@`%` FUNCTION `ileWTygodniu`(id INT, dataPoczatkuTygodniu DATETIME, dataKoncaTygodnia DATETIME) RETURNS float
BEGIN
DECLARE liczbaGodzin DOUBLE;
SET liczbaGodzin = (SELECT ROUND((SUM(TIME_TO_SEC(TIMEDIFF(dataZakonczenia, dataRozpoczecia))) / 3600), 1)
FROM test
WHERE dataRozpoczecia >= dataPoczatkuTygodniu
AND dataZakonczenia <= dataKoncaTygodnia
AND idMieszk = id);
IF (liczbaGodzin IS NULL) THEN
RETURN 0;
ELSE
RETURN liczbaGodzin;
END IF;
END
Funkcja zwraca poprawnie wartość do TextBoxa-a, ale na podstawie wartości zwracanej chciałbym, aby mi zaznaczało wiersze w DataGridView, jeżeli wartość zwracana będzie mniejsza od 10. Wykorzystałem do tego zdarzenie "CellFormatting"
id = Convert::ToInt32(dataGridview1->Rows[e->RowIndex]->Cells[0]->Value);
double ile = sprawdzIle(idMieszk, DataOd, DataDo, konfiguracjaPolaczenia());
if (ile < 10)
{
dataGridview1->Rows[e->RowIndex]->DefaultCellStyle->BackColor = Color::Red;
}
double ile(int id, System::Windows::Forms::DateTimePicker^ dataOd, System::Windows::Forms::DateTimePicker^ dataDo, String^ konfiguracja)
{
double ileGodzin = 0;
MySqlConnection^ polaczenie = gcnew MySqlConnection(konfiguracja);
polaczenie->Open();
DateTime^ dataOd = Convert::ToDateTime(dataOd->Text);
DateTime^ dataDo = Convert::ToDateTime(dataDo->Text);
MySqlCommand^ zapytanie = gcnew MySqlCommand("SELECT ile(" + id + ", '" + dataOd + "', '" + dataDo + "');", polaczenie);
try
{
ileGodzin = Convert::ToDouble(zapytanie->ExecuteScalar());
return ileGodzin;
}
catch (Exception^ komunikat)
{
MessageBox::Show(komunikat->Message);
return 1;
}
polaczenie->Close();
}
Wszystko niby działa, tzn. rekordy są formatowane, ale trwa to długo, a jak przewinę listę w datagdrdview to mi wywala program z komunikatem, mówiącym o przekroczonym czasie. Mógłby mi ktoś podpowiedzieć jak poprawnie zrobić takie formatowanie? Lista w datagridview zawiera ok. 50 pozycji.