Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Фиксированные ячейки в StringGrid 
V
    Опции темы
iDeus
Дата 12.2.2012, 04:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Deus vult
*


Профиль
Группа: Участник
Сообщений: 55
Регистрация: 5.6.2008
Где: Vladivostok

Репутация: нет
Всего: нет



Здравствуйте, подскажите пожалуйста, в чем может быть причина такой проблемы: 

На форме лежит StringGrid, которая заполняется из БД функцией CriterionListUpdate() (листинг будет ниже), изначально для этого StringGrid FixedRows = 1, и постоянное значение количества колонок ColCount = 14. 

Проблема заключается в том, что при прорисовке данного StringGrid в ходе программы, пропадает "фиксированность" первой строки. Т.е. сама строка с названиями колонок остается, но ее можно выбрать. 

Таким образом: user posted image
На скриншоте 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;
}


В чем же дело? Может быть есть, какие-то предположения, как это исправить?
PM MAIL ICQ Skype GTalk   Вверх
sawfish
Дата 12.2.2012, 16:17 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 150
Регистрация: 30.7.2008
Где: Новосибирск

Репутация: 8
Всего: 8



После сброса количества строк (RowCount = 0;) количество фиксированных строк тоже сбрасывается. После того, как заполнили грид строками, нужно выставить руками количество фиксированных строк (и не важно, что в инспекторе объектов выставлено FixedRows - это работает только при создании грида и до первых манипуляций с ним).
PM MAIL   Вверх
iDeus
Дата 12.2.2012, 16:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Deus vult
*


Профиль
Группа: Участник
Сообщений: 55
Регистрация: 5.6.2008
Где: Vladivostok

Репутация: нет
Всего: нет



sawfish, действительно, спасибо большое. 

исправил, теперь все работает как надо
PM MAIL ICQ Skype GTalk   Вверх
sawfish
Дата 12.2.2012, 16:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 150
Регистрация: 30.7.2008
Где: Новосибирск

Репутация: 8
Всего: 8



Пожалуйста!
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++ Builder"
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по С++ Builder обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Настоятельно рекомендуем заглянуть в DRKB (Delphi Russian Knowledge Base) - крупнейший в рунете сборник материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C++ Builder | Следующая тема »


 




[ Время генерации скрипта: 0.0675 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.