Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.58/65: Рейтинг темы: голосов - 65, средняя оценка - 4.58
130 / 15 / 6
Регистрация: 05.08.2013
Сообщений: 285
1

Qauntum Grid (использование TcxGrid без привязки к набору данных)

13.12.2013, 02:10. Показов 12840. Ответов 23
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Всем доброй ночи.
Кто-нибудь может подсказать, как работать с Qauntum Greed,
используя обычную таблицу (cxTable) или подсказать какой-нибудь
ресурс, где есть документация на эту тему, кроме той, что на DevExpress,
с учётом того, что разработка ведётся в C++ Builder 6.
P.S. На DevExpress примеры только для c#,vb b xaml.
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
13.12.2013, 02:10
Ответы с готовыми решениями:

Есть ли аналог Grid без привязки к позиции Row,Column а с привязкой к идентификатору ячейки названному например id
Добрый день! Есть ли аналог Grid без привязки к позиции Row,Column а с привязкой к...

Возможно ли задать в XAML число строк и столбцов Grid сразу, без исп <Grid.ColumnDefinitions> и <Grid.RowDefinnitions>?
Возможно ли задать в XAML число строк и столбцов Grid сразу, без исп &lt;Grid.ColumnDefinitions&gt; и...

Нужна таблица наподобие DBGRID, но без привязки к базе данных
У меня есть две таблица в бд(меню и заказ), по нажатии на строку в 1 первой таблице(меню) у меня...

Как сохранить данные введенные в DataGridView без привязки к источникам данных
Есть форма на которой расположен DataGriedView, в который в свою очередь заносятся данные из...

23
1569 / 505 / 48
Регистрация: 04.04.2009
Сообщений: 1,891
18.12.2013, 02:28 21
Author24 — интернет-сервис помощи студентам
fier,
Цитата Сообщение от fier Посмотреть сообщение
На кнопку не пойдёт
Это чисто в исследовательских целях. Я пытаюсь понять где проблема.
0
130 / 15 / 6
Регистрация: 05.08.2013
Сообщений: 285
18.12.2013, 02:35  [ТС] 22
Попробывал. Тоже самое.
3 - до
Qauntum Grid (использование TcxGrid без привязки к набору данных)

4 -после
Qauntum Grid (использование TcxGrid без привязки к набору данных)
0
1569 / 505 / 48
Регистрация: 04.04.2009
Сообщений: 1,891
18.12.2013, 13:59 23
fier, а так:
C++
1
2
3
4
5
6
7
void __fastcall TForm1::Button1Click(TObject *Sender)
{
    randomize();
    cxGrid1TableView1->DataController->AppendRecord();
    cxGrid1TableView1->DataController->SetValue(cxGrid1TableView1->DataController->RecordCount-1,0,random(10));
    cxGrid1TableView1->DataController->SetValue(cxGrid1TableView1->DataController->RecordCount-1,1,false);
}
?

Добавлено через 11 часов 20 минут
В общем, я склоняюсь все-таки к тому, что это глюк ранней версии компоненты. Увы, уточнить эту информацию официально нельзя, т.к. DevExpress на данный момент не поддерживают C++ Builder 6.

В качестве решения можно проапгрейдить пакет ExpressQuantumGrid. После апгрейда проблема уйдет (имею в виду в С++ Builder 6) - я проверил.
Но, увы, апгрейд придется делать вручную. Инструкцию выслал в ЛС.
0
130 / 15 / 6
Регистрация: 05.08.2013
Сообщений: 285
21.12.2013, 01:27  [ТС] 24
Лучший ответ Сообщение было отмечено как решение

Решение

Вопрос решен. Проблема заключалась в глюке QuantumGrid'а 4.5. Огромное спасибо Immortal, за помощь. А так всё вышесказанное, по работе с таблицей cxTable справедливо и этим можно пользоваться. Если у кого-нибудь возникнут аналогичные проблемы (глючная версия, установка) и т.д. - пишите в личку, с радостью отвечу.

Добавлено через 32 минуты
И вот у меня уже есть вопрос. Как динамически удалять записи, по примеру Immortal, для checkbox'ов? К примеру, если я нажимаю на checkbox, то у меня появляется не одна запись в другой таблице, а 10, 20...сколько угодно. Единственное, что объединяет эти записи - один столбец, который для каждой из записей одинаков. Так вот, при деактивации checkbox'а нужно, чтобы эти записи из другой таблицы (которых может быть много), удалялись все сразу.
Я вот придумал такое решение:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
//РАССМОТРИМ ПРИМЕР Immortal
void __fastcall TForm8::cxGrid1CheckBoxColumnPropertiesEditValueChanged(TObject *Sender)
{
    int DelRecIndex;
    AnsiString Text_1,Text_2;//СЮДА ДОБАВИЛ 2-ю ПЕРЕМЕННУЮ ТИПА AnsiString, ОНА ПРИГОДИТСЯ ДЛЯ УДАЛЕНИЯ ЧИСЛА ЗАПИСЕЙ>1 ВО ВТОРОЙ ТАБЛИЦЕ
    TcxGridDataController* DataController1;
    TcxGridDataController* DataController2;
    TcxCheckBox* cxCheckBox;
 
    int RecIndex = cxGrid1TableView1->DataController->FocusedRecordIndex;
    DataController1 = cxGrid1TableView1->DataController;
    DataController2 = cxGrid2TableView1->DataController;
    cxCheckBox = dynamic_cast<TcxCheckBox*> (Sender);
  //ЕСЛИ МЫ АКТИВИРОВАЛИ CHECKBOX
    if (cxCheckBox->Checked)
    {
      //Здесь, к примеру сделаю цикл, чтобы вставить 10 записей
        for (int i=0;i<10;i++) {
            DataController2->RecordCount++;
            DataController2->Values[DataController2->RecordCount-1][cxGrid2IDColumn->Index] =       DataController1->Values[RecIndex][cxGrid1IDColumn->Index];
            DataController2->Values[DataController2->RecordCount-1][cxGrid2TextColumn->Index] = DataController1->Values[RecIndex][cxGrid1TextColumn->Index];
        } 
    }
//ЕСЛИ МЫ СДЕЛАЛИ CHECKBOX НЕАКТИВНЫМ
    else
    {  
       //ПОЛУЧИМ ЗНАЧЕНИЕ, ТОГО СТОЛБЦА, КОТОРЫЙ ДЛЯ ОДНОГО СТОЛБЦА ИЗ ВСЕХ ЗАПИСЕЙ ВО 2-Й ТАБЛИЦЕ ОДИНАКОВ 
       Text_1 = VarToStr(DataController1->Values[RecIndex][cxGrid1IDColumn->Index]);
        //СОЗДАДИМ ПЕРЕМЕННУЮ, ДЛЯ ХРАНЕНИЯ ИНДЕКСОВ, ТЕХ ЗАПИСЕЙ ВО ВТОРОЙ ТАБЛИЦЕ, КОТОРЫЕ СОДЕРЖАТ ИСКОМОЕ ЗНАЧЕНИЕ
       vector<int> k;
       //ВЫПОЛНИМ ИТЕРАЦИЮ ПО ВСЕМ ЗАПИСЯМ ВО ВТОРОЙ ТАБЛИЦЕ
       for (int i=1;i<DataController2->RowCount;i++) {
       //ДЛЯ КАЖДОГО ПЕРЕМЕЩЕНИЯ ПО ИТЕРАЦИИ, ПОЛУЧИМ ТЕКУЩЕЕ ЗНАЧЕНИЕ СТОЛБЦА, В КОТОРЫЙ МЫ ЗАПИСЫВАЛИ ПРИ ВЫБРАННОМ CHECKBOX'Е 
          Text_2 = VarToStr(DataController1->Values[i][cxGrid2IDColumn->Index] ); 
       //ЕСЛИ  ЗНАЧЕНИЕ СТОЛБЦА ВО 2-Й ТАБЛИЦЕ, РАВНО ЗНАЧЕНИЮ СТОЛБЦА В 1-Й ТАБЛИЦЕ, ТО ТАКУЮ ЗАПИСЬ МЫ ПОТОМ ДОЛЖНЫ УДАЛИТЬ, ПОЭТОМУ ЗАПИШЕМ ЕЁ ИНДЕКС, ЧТОБЫ ПОТОМ DELETE ЕЁ
          if (CompareText(Text_1,Text_2)==0) {
             k.push_back(i);
          }
       }
       //А ВОТ ТЕПЕРЬ УДАЛИМ ЗАПИСИ, КОТОРЫЕ НУЖНО ИЗ 2-Й ТАБЛИЦЫ, НО НЕОБХОДИМО УЧИТЫВАТЬ, ЧТО ПРИ УДАЛЕНИИ ЗАПИСИ ИНДЕКСОВ ЗАПИСЕЙ СТАНОВИТСЯ МЕНЬШЕ НА 1
        for (i=0;i<k.size();i++) {
           if (i>0) {
              DataController2->DeleteRecord(i-1);        
           }
           if (i==0) {
              DataController2->DeleteRecord(i); 
           }
        } 
        
    }
}
Ну вот как-то так решил эту проблему, вроде должно работать, конечно не идеально, можно использовать не Vector, и циклы сделать более рациональными. Если кто-нибудь делал что-то подобно, но по другому, может подскажете свой путь.

Добавлено через 3 часа 25 минут
Сорри, с ошибкой написал последний цикл
Было
C++
1
2
3
4
5
6
7
8
9
//А ВОТ ТЕПЕРЬ УДАЛИМ ЗАПИСИ, КОТОРЫЕ НУЖНО ИЗ 2-Й ТАБЛИЦЫ, НО НЕОБХОДИМО УЧИТЫВАТЬ, ЧТО ПРИ УДАЛЕНИИ ЗАПИСИ ИНДЕКСОВ ЗАПИСЕЙ СТАНОВИТСЯ МЕНЬШЕ НА 1
        for (i=0;i<k.size();i++) {
           if (i>0) {
              DataController2->DeleteRecord(i-1);        
           }
           if (i==0) {
              DataController2->DeleteRecord(i); 
           }
        }
Должно быть
C++
1
2
3
4
5
6
7
8
9
//А ВОТ ТЕПЕРЬ УДАЛИМ ЗАПИСИ, КОТОРЫЕ НУЖНО ИЗ 2-Й ТАБЛИЦЫ, НО НЕОБХОДИМО УЧИТЫВАТЬ, ЧТО ПРИ УДАЛЕНИИ ЗАПИСИ ИНДЕКСОВ ЗАПИСЕЙ СТАНОВИТСЯ МЕНЬШЕ НА 1
        for (int i=0;i<k.size();i++) {
           if (i>0) {
              DataController2->DeleteRecord(k[i]);        
           }
           if (i==0) {
              DataController2->DeleteRecord(k[i]-1); 
           }
        }
Добавлено через 7 часов 44 минуты
Ну, как говорится 3 счастливое число, поэтому пишу действительно правильный вариант цикла. Предыдущий тоже неверный, всё-равно выходишь за границы индексов.
C++
1
2
3
4
5
6
7
8
9
10
int num=0;
                for (int j=0;j<i.size();j++) {
                        if (j==0) {
                                DataController2->DeleteRecord(i[j]);
                        }
                        if (j>0) {
                                num++;
                                DataController2->DeleteRecord(i[j]-num);
                        }        
                }
1
21.12.2013, 01:27
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
21.12.2013, 01:27
Помогаю со студенческими работами здесь

БД без привязки к определенному компьютеру
Доброго времени суток, пишу программу с БД Access. Назрел вопрос, как сделать что бы при переносе...

заполнение таблицы без привязки
добрый день. продолжаю изучать access. сделал зависимые списки (страна-город) но тут пришла...

Поиск по всему набору данных
Здраствуйте! Есть база данных созданая в аксесе и имеет 6 таблиц, в программе расположил 6...

Как скопировать график без привязки к листу
Здравствуйте, расскажите пожалуйста, есть ли возможность скопировать график эксель без знаков $,...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
24
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru