Здравствуйте, подскажите пожалуйста, в чем может быть причина такой проблемы: На форме лежит StringGrid, которая заполняется из БД функцией CriterionListUpdate() (листинг будет ниже), изначально для этого StringGrid FixedRows = 1, и постоянное значение количества колонок ColCount = 14. Проблема заключается в том, что при прорисовке данного StringGrid в ходе программы, пропадает "фиксированность" первой строки. Т.е. сама строка с названиями колонок остается, но ее можно выбрать. Таким образом:  На скриншоте 2, практически идентичных формы, StringGrids'ы на которых заполняются сложим методом, но на 1 форме фиксированная строка не пропадает, а остается фиксированной. Листинг FormCreate: Код | void __fastcall TRatingAddForm::FormCreate(TObject *Sender) { //подгружаем иконки на кнопки this->ImageList->GetBitmap(4, this->bt_refresh->Glyph); this->ImageList->GetBitmap(1, this->bt_add->Glyph); this->ImageList->GetBitmap(2, this->bt_remove->Glyph); this->ImageList->GetBitmap(3, this->bt_edit->Glyph);
//положение окна this->Top = (MainForm->rect.Height()/2-(this->Height/2)); this->Left = (MainForm->rect.Width()/2-(this->Width/2));
e_name->Clear(); m_comment->Clear();
this->CriterionListUpdate(); }
|
Листинг заполнения StringGrid: Код | void __fastcall TRatingAddForm::CriterionListUpdate() { //обновляем список критериев RowCount = 0; //количество строк которые нам понадобятся
//берем из БД все что касается критериев этого рейтинга MainForm->Cursor = crSQLWait; Screen->Cursor = crSQLWait;
this->PSQLQuery_Criterion->Close(); this->PSQLQuery_Criterion->SQL->Clear(); this->PSQLQuery_Criterion->SQL->Text = "SELECT * FROM criterion WHERE owner_id = :id ORDER BY id ASC"; this->PSQLQuery_Criterion->ParamByName("id")->Value = this->ratind_id; this->PSQLQuery_Criterion->Open(); this->PSQLQuery_Criterion->First(); while(!PSQLQuery_Criterion->Eof) { RowCount++; PSQLQuery_Criterion->Next(); } this->sg_criterion->RowCount = RowCount + 1;
// нулевые ячейки
this->sg_criterion->Cells[0][0] = "id"; this->sg_criterion->ColWidths[0] = -1; this->sg_criterion->Cells[1][0] = "Назвение критерия"; this->sg_criterion->Cells[2][0] = "sub"; this->sg_criterion->ColWidths[2] = -1; this->sg_criterion->Cells[3][0] = "owner"; this->sg_criterion->ColWidths[3] = -1; this->sg_criterion->Cells[4][0] = "depth"; this->sg_criterion->ColWidths[4] = -1; this->sg_criterion->Cells[5][0] = "Формула"; this->sg_criterion->Cells[6][0] = "Переменная"; this->sg_criterion->Cells[7][0] = "Кем добавлен"; this->sg_criterion->Cells[8][0] = "Когда добавлен"; this->sg_criterion->Cells[9][0] = "Когда изменен"; this->sg_criterion->Cells[10][0] = "Вес критерия"; this->sg_criterion->Cells[11][0] = "Комментарий"; this->sg_criterion->Cells[12][0] = "qt_subCrit"; this->sg_criterion->ColWidths[12] = -1; this->sg_criterion->Cells[13][0] = "Для школы?"; this->sg_criterion->ColWidths[13] = -1;
int i = 1; this->PSQLQuery_Criterion->First(); while(!PSQLQuery_Criterion->Eof) { sg_criterion->Cells[0][i] = PSQLQuery_Criterion->FieldByName("id")->AsString; sg_criterion->Cells[1][i] = PSQLQuery_Criterion->FieldByName("name")->AsString; sg_criterion->Cells[2][i] = PSQLQuery_Criterion->FieldByName("sub")->AsString; sg_criterion->Cells[3][i] = PSQLQuery_Criterion->FieldByName("owner_id")->AsString; sg_criterion->Cells[4][i] = PSQLQuery_Criterion->FieldByName("depth")->AsString; sg_criterion->Cells[5][i] = PSQLQuery_Criterion->FieldByName("formula")->AsString; sg_criterion->Cells[6][i] = PSQLQuery_Criterion->FieldByName("var")->AsString; sg_criterion->Cells[7][i] = PSQLQuery_Criterion->FieldByName("add_by")->AsString; sg_criterion->Cells[8][i] = MainForm->Unix2DateTime(PSQLQuery_Criterion->FieldByName("when_added")->AsLargeInt); sg_criterion->Cells[9][i] = MainForm->Unix2DateTime(PSQLQuery_Criterion->FieldByName("when_editing")->AsLargeInt); sg_criterion->Cells[10][i] = PSQLQuery_Criterion->FieldByName("weight")->AsString; sg_criterion->Cells[11][i] = PSQLQuery_Criterion->FieldByName("comment")->AsString; sg_criterion->Cells[12][i] = PSQLQuery_Criterion->FieldByName("qt_subcriterions")->AsString; sg_criterion->Cells[13][i] = PSQLQuery_Criterion->FieldByName("for_school")->AsString; PSQLQuery_Criterion->Next(); i++; } this->PSQLQuery_Criterion->Close();
//заменяем индексы пользователей в Add_by на имена
this->PSQLQuery_Criterion->Close(); this->PSQLQuery_Criterion->SQL->Clear(); this->PSQLQuery_Criterion->SQL->Text = "SELECT id, name FROM users"; this->PSQLQuery_Criterion->Open(); //ищем в базе совпадения id и add_by bool fl = false; for(int i = 1; i <= RowCount; i++) { fl = false; this->PSQLQuery_Criterion->First(); while(!PSQLQuery_Criterion->Eof) { if(sg_criterion->Cells[7][i].ToInt() == PSQLQuery_Criterion->FieldByName("id")->AsInteger) { //присваиваем имя sg_criterion->Cells[7][i] = PSQLQuery_Criterion->FieldByName("name")->AsString; fl = true; } if(fl)break; this->PSQLQuery_Criterion->Next(); } if(!fl)sg_criterion->Cells[4][i] = L"FAILED"; } this->PSQLQuery_Criterion->Close(); Screen->Cursor = crDefault; MainForm->Cursor = crDefault; }
|
В чем же дело? Может быть есть, какие-то предположения, как это исправить?
|