Я работаю на С++ (по крайней мере пытаюсь

).
Задался целью написать функцию для отображения временного ряда. Данные берутся из datagridview, рисую на panel.
Вот эта функция (находится в файле Form1.h):
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
int Print_Data_to_Panel(Windows::Forms::Panel ^ PANEL, Windows::Forms::DataGridView ^ DATA_GRID)
{
if(Convert::ToString(DATA_GRID->Rows[0]->Cells[0]->Value) == "") //проверка таблицы данных на наличие данных
{ //если 1-й элемент таблицы пустой,
MessageBox::Show("Таблица данных пуста."); //то считается, что вся таблица пуста.
return 0;
}
if(Convert::ToString(DATA_GRID->Rows[1]->Cells[0]->Value) == "") //проверка на наличие в таблице данных
{ //не менее 2-х значений
MessageBox::Show("В таблице должно быть не менее 2-х значений.");
return 0;
}
int i = 0, //счетчик.
numb; //буфер для хранения количества элементов.
float data[100000], //массив данных.
y_max = Convert::ToSingle(DATA_GRID->Rows[0]->Cells[0]->Value), //максимальное значение в массиве данных.
y_min = Convert::ToSingle(DATA_GRID->Rows[0]->Cells[0]->Value), //минимальное значение в массиве данных.
width = Convert::ToSingle(PANEL->Width), //ширина панели.
height = Convert::ToSingle(PANEL->Height), //высота панели.
height_graph = height — 100.0F, //высота области отрисовки графика.
width_graph = width — 100.0F, //ширина области отрисовки графика.
k_s_y, //коэффициент смещения вдоль оси у, который
//служит для того, чтобы график попадал в рамку.
height_virt ; //настоящая высота графика, которая получается:
//1. сложением макс. и мин. значений в
// массиве данных (в случае, если макс. значение
// больше нуля и мин. значение меньше нуля);
//2. присваиванием макс. значения (в случае,
// если макс. и мин. значения больше нуля);
//3. присваиванием мин. значения (в случае, если
// макс. и мин. значения меньше нуля).
//нахождение макс. и мин. значений---------------------------------------------------------------------------------------
while( ( i != DATA_GRID->RowCount) && (DATA_GRID->Rows[i]->Cells[0]->Value) ) //нахождение макс. и мин. значений
{
data[i] = Convert::ToSingle(DATA_GRID->Rows[i]->Cells[0]->Value);
if( y_min > data[i]) y_min = data[i];
if( y_max < data[i]) y_max = data[i];
i++;
}
//-----------------------------------------------------------------------------------------------------------------------
//находим настоящую высоту высоту графика и коэффициент смещения вдоль оси у---------------------------------------------
if( y_min <= 0 && y_max <= 0 )
{
height_virt = Math::Abs(y_min);
k_s_y = y_min;
}
if( y_min <= 0 && y_max >= 0 )
{
height_virt = Math::Abs(y_max) + Math::Abs(y_min);
k_s_y = y_min;
}
if( y_min >= 0 && y_max >= 0 )
{
height_virt = y_max;
k_s_y = 0.0f;
}
//находим высоту шкалы y-------------------------------------------------------------------------------------------------
//-----------------------------------------------------------------------------------------------------------------------
numb = i — 1;
i = 0;
//инициализируем инструменты для отрисовки-------------------------------------------------------------------------------
Graphics^ g = PANEL->CreateGraphics();
Pen^ for_point = gcnew Pen(Brushes::Black);
Pen^ for_line = gcnew Pen(Brushes::OrangeRed);
Pen^ for_border = gcnew Pen(Brushes::Black);
for_point->Width = 1.0F;
for_line->Width = 1.0F;
for_border->Width = 2.0F;
g->SmoothingMode = System::Drawing::Drawing2D::SmoothingMode::AntiAlias;
//-----------------------------------------------------------------------------------------------------------------------
float step_x = width_graph/Convert::ToSingle(numb),
x = 0,
next_x = 0,
y = height_graph * (1.0f — (data[0]-k_s_y) / height_virt),
next_y = 0;
//пытаемся нарисовать оси координат-----------------------------------------------
g->DrawLine( for_border,
50.0f,
10.0f,
50.0f,
height — 50.0f);
g->DrawLine( for_border,
50.0f,
height — 50.0f,
width — 10.0f,
height — 50.0f);
/*g->DrawLine( for_border,
width — 50.0f,
height — 50.0f,
width — 50.0f,
50.0F );
g->DrawLine( for_border,
width — 50.0f,
50.0F,
50.0f,
50.0f );*/
//--------------------------------------------------------------------------------
while( i < numb )
{
next_x += step_x;
next_y = height_graph*(1.0f — (data[i+1]-k_s_y) / height_virt);
g->DrawLine( for_line,
x + 50.0F ,
y + 50.0F ,
next_x + 50.0F,
next_y + 50.0F);
g->DrawEllipse( for_point,
x — 1 + 50.0F ,
y — 1 + 50.0F ,
2.0f ,
2.0f );
g->DrawEllipse( for_point,
next_x — 1 + 50.0F ,
next_y — 1 + 50.0F ,
2.0f,
2.0f);
x += step_x;
y = next_y;
i++;
}
g->DrawEllipse( for_point,
100.0F — 2,
height_graph*(1.0f + k_s_y / height_virt) + 50.0F — 2 ,
4.0f ,
4.0f );
return 1;
}
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
Эта функция вызывается в обработчике нажатия кнопки
Стоит свернуть и развернуть эту форму и график исчезает.
Помогите!!! Перерыл кучу инфы, книжек и форумов, включая этот... Нахожусь на грани отчаяния

!!!
Как мне перерисовать график

?