Форум программистов, компьютерный форум, киберфорум
C++ Builder: Базы данных
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/7: Рейтинг темы: голосов - 7, средняя оценка - 5.00
 Аватар для nnnikotinnn995
7 / 7 / 4
Регистрация: 07.07.2011
Сообщений: 583

Как показать отфильтрованную таблицу в новой вкладке

11.02.2014, 13:35. Показов 1553. Ответов 17
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте. Я использую в программе таблицу с помощью связки 3 компонентов (TADOConnection, TDataSource
TADOTable) - среда C++ Builder6. Фильтрую по числовым полям таким образом
C++
1
2
3
4
5
6
void __fastcall TForm1::Button2Click(TObject *Sender)
{
 ADOTable1->Filtered=false;
   ADOTable1->Filter = "возраст < 55 AND возраст >5";
   ADOTable1->Filtered=true;
}
Подскажите пожалуйста как можно показать эту фильтрованную таблицу в новой вкладке (наподобие браузера, количество вкладок безгранично или больше пяти)? Нужно ли создавать новую форму?
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
11.02.2014, 13:35
Ответы с готовыми решениями:

Как открыть сайт в новой вкладке
Засунул в форму tabControl и поместил на него webBrowser, хочу что бы при нажатии по ссылке в открывшемся сайте, новая страница открывалась...

Как открыть форму в новой вкладке?
Требуется из одной формы на нажатие кнопки открыть следующую форму в новой вкладке(хотя бы в той же), подскажите пожалуйста)

Как открыть в новой вкладке WebBrowser
При нажатии на ссылку в WebBrowser она открывается в IE на моем компьютере. Как сделать так, чтобы она открывалась в новой вкладке через...

17
 Аватар для Sasha
4956 / 2420 / 531
Регистрация: 05.06.2008
Сообщений: 7,518
Записей в блоге: 3
11.02.2014, 14:16
Сделать функцию и вызывать её каждый раз на новой вкладке
0
 Аватар для nnnikotinnn995
7 / 7 / 4
Регистрация: 07.07.2011
Сообщений: 583
11.02.2014, 15:12  [ТС]
Цитата Сообщение от Sasha Посмотреть сообщение
Сделать функцию и вызывать её каждый раз на новой вкладке
А как создать новую вкладку (при нажатие на кнопку), какой класс-метод за это отвечает? Нужно ли создавать PageControl? Наверно зря меня сюда переместили, потому что вопрос не по БД, а по тому, как позволить пользователю создавать новые вкладки при определенных действиях, и переносить в них данные таблицы.
0
 Аватар для nnnikotinnn995
7 / 7 / 4
Регистрация: 07.07.2011
Сообщений: 583
14.02.2014, 08:32  [ТС]
Новую вкладку можно сделать так
добавить PageControl и написать где нить
C++ (Qt)
1
2
3
4
TTabSheet *page = new TTabSheet(Handle);
page->Caption = "Page" + IntToStr(PageControl1->PageCount+1);
page->PageControl = PageControl1;
PageControl1->ActivePageIndex = PageControl1->PageCount-1;
А можно ли закрепить за вкладкой текущие состояние таблицы, или надо при каждом нажатие на вкладке вызывать соответствующую данной вкладке функцию фильтрации таблицы (и где то хранить)? По идее можно создать еще одну форму и вызывать при каждой новой фильтрации
C++ (Qt)
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
#include "Umain.h"
#include "Udoc.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TFmain *Fmain;
TList * LDoc;
 
 
//---------------------------------------------------------------------------
__fastcall TFmain::TFmain(TComponent* Owner)
        : TForm(Owner)
{
}
//---------------------------------------------------------------------------
 
void __fastcall TFmain::MNewClick(TObject *Sender)
{
 TFDoc * New = new TFDoc(this);//                вторая форма
 LDoc->Add(New);
 New->Caption = "Документ "+IntToStr(LDoc->Count);
}
//---------------------------------------------------------------------------
void __fastcall TFmain::FormCreate(TObject *Sender)
{
 LDoc = new TList();
}
Но тогда форма будет появляться в новом окне а не во вкладке. Подскажите пожалуйста, как лучше "закрепить" за вкладкой состояние страницы? Можно ли открыть новую форму в не в отдельном окне, а в новой вкладке?
0
 Аватар для Sasha
4956 / 2420 / 531
Регистрация: 05.06.2008
Сообщений: 7,518
Записей в блоге: 3
14.02.2014, 11:17
Цитата Сообщение от nnnikotinnn995 Посмотреть сообщение
Можно ли открыть новую форму в не в отдельном окне, а в новой вкладке
Можно. Только в каждой вкладке тебе необходимо не форму создавать, а DBGrid и делать это динамически
0
 Аватар для nnnikotinnn995
7 / 7 / 4
Регистрация: 07.07.2011
Сообщений: 583
14.02.2014, 16:19  [ТС]
Цитата Сообщение от Sasha Посмотреть сообщение
Можно. Только в каждой вкладке тебе необходимо не форму создавать, а DBGrid и делать это динамически
Я правильно вас понял? При каждом новом создание вкладки мы динамически создаем новый компонент DBGrid например так
C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
TDBGrid *dbgrin; TTabSheet *page;
//       создание вкладки
page = new TTabSheet(Handle);
page->Caption = "Pagen" + IntToStr(PageControl1->PageCount+1);
page->PageControl = PageControl1;
PageControl1->ActivePageIndex = PageControl1->PageCount-1;
//       создание DBGrid 
dbgrin= new TDBGrid(this);
       dbgrin->DataSource=DataSource1;
dbgrin->Top = page->Top+y;//                   позиция
   dbgrin->Left = page->Left+x;
         dbgrin->Parent=Form1;
То есть все что сделано пользователем с таблицей в данной вкладке нужно где то сохранять, а потом при нажатие на PageControl1 вызывать- нужно выдумывать методы. А нельзя ли как то автоматически "закрепить" за вкладкой состояние таблицы?

Добавлено через 41 минуту
Проблема в том, что фильтер назначается на ADOTable1
C++ (Qt)
1
ADOTable1->Filter = "возраст < 55 AND возраст >5";
а не на TDBGrid. Может стоит ADOTable1 создавать динамически ?
0
 Аватар для Sasha
4956 / 2420 / 531
Регистрация: 05.06.2008
Сообщений: 7,518
Записей в блоге: 3
14.02.2014, 16:23
Цитата Сообщение от nnnikotinnn995 Посмотреть сообщение
dbgrin->Parent=Form1;
Здесь родителя лучше поставить сам
C++
1
PageControl
, а не Form1

Добавлено через 29 секунд
Цитата Сообщение от nnnikotinnn995 Посмотреть сообщение
Может стоит ADOTable1 создавать динамически ?
Думаю да
0
 Аватар для nnnikotinnn995
7 / 7 / 4
Регистрация: 07.07.2011
Сообщений: 583
14.02.2014, 16:46  [ТС]
Цитата Сообщение от Sasha Посмотреть сообщение
Добавлено через 29 секунд
Цитата Сообщение от nnnikotinnn995 Посмотреть сообщение
Может стоит ADOTable1 создавать динамически ?
Думаю да
Только почему то он так просто не создается как обычные компоненты, нет такого класса ADOTable и TADOTable. При создания объекта (TADOTable nnn ошибку выдает.
0
 Аватар для Sasha
4956 / 2420 / 531
Регистрация: 05.06.2008
Сообщений: 7,518
Записей в блоге: 3
15.02.2014, 22:18
А как ты создаёшь этот объект
0
 Аватар для nnnikotinnn995
7 / 7 / 4
Регистрация: 07.07.2011
Сообщений: 583
16.02.2014, 12:24  [ТС]
Я забыл умножение поставить
C++ (Qt)
1
TADOTable *table;
Добавлено через 9 минут
Но похоже тут нужно будет динамически все 3 объекта создавать.
0
 Аватар для nnnikotinnn995
7 / 7 / 4
Регистрация: 07.07.2011
Сообщений: 583
17.02.2014, 22:03  [ТС]
Хотелось бы напоследок дать юзеру возможность сохранять все в файл, что он сделал в проге и открывать все это. Что касается сохранения "интерфейса" (количество вкладок, параметры фильтрации...), то его можно сохранить в текстовом файле как то так
C++ (Qt)
1
fwrite(&pointcount, sizeof(int), 2, pFile);
Думаю одного типа int может на все хватить. Но во первых это очень не удобно, а во вторых как быть, если пользователь изменит таблицу, придется сохранять не только файл, но и в тайне от юзера сохранять таблицу с именем файла в который он сохраняет свой проект? Подскажите пожалуйста, существует ли такой метод, который сохраняет все , что сделал пользователь (включая таблицу при необходимости) в один файл? Как лучше всего это сделать?
0
 Аватар для Sasha
4956 / 2420 / 531
Регистрация: 05.06.2008
Сообщений: 7,518
Записей в блоге: 3
17.02.2014, 23:58
http://voodooman.ucoz.ua/publ/... me/1-1-0-2
1
 Аватар для nnnikotinnn995
7 / 7 / 4
Регистрация: 07.07.2011
Сообщений: 583
18.02.2014, 16:44  [ТС]
Цитата Сообщение от Sasha Посмотреть сообщение
Спасибо конечно. Но единственное, что тут сохраняется, это дата и имя.
C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
void __fastcall WriteLogStr(AnsiString Str, AnsiString Usr)
{
  char mode[5] = "a+b";
  struct stat info;
  AnsiString LogFile = "Log\\" + Usr, DateLog = FormatDateTime("ddmmyyyy", Now());
  LogFile += DateLog + ".log";
  stat((LogFile).c_str(), &info);
  FILE* FFile = fopen(LogFile.c_str(), mode);
  if (FFile == NULL) {
    return;
  }
  fputs(Str.c_str(),FFile);               ////                            то есть тут 
  fclose(FFile);
}
У меня создается текстовый файл с расширением .log. А как таблицу туда же сохранить? Можно ли это сделать с помощью fputs(Str.c_str(),FFile);? Что вы этой ссылкой хотели сказать?
0
 Аватар для Sasha
4956 / 2420 / 531
Регистрация: 05.06.2008
Сообщений: 7,518
Записей в блоге: 3
18.02.2014, 18:36
Цитата Сообщение от nnnikotinnn995 Посмотреть сообщение
Что вы этой ссылкой хотели сказать?
Честно говоря думал что тебе надо определить что делал пользователь в какое-то время
0
 Аватар для nnnikotinnn995
7 / 7 / 4
Регистрация: 07.07.2011
Сообщений: 583
18.02.2014, 22:01  [ТС]
Цитата Сообщение от Sasha Посмотреть сообщение
Честно говоря думал что тебе надо определить что делал пользователь в какое-то время
Мне нужно сохранить все в такой файл, который содержит всю информацию о том, что пользователь сделал в проекте (то есть количество вкладок,содержимое в каждой вкладке (фильтрация) и измененную таблицу). Пользователь кликая на этот файл может открыть его с помощью моей программы, или открыть его внутри программы. Как вы думаете, возможно создать такой файл, или нужно отдельно сохранять в текстовом файле данные проекта(фильтрация, вкладки...) и отдельно измененную таблицу?
0
 Аватар для Sasha
4956 / 2420 / 531
Регистрация: 05.06.2008
Сообщений: 7,518
Записей в блоге: 3
18.02.2014, 23:15
Цитата Сообщение от nnnikotinnn995 Посмотреть сообщение
Мне нужно сохранить все в такой файл, который содержит всю информацию о том, что пользователь сделал в проекте (то есть количество вкладок,содержимое в каждой вкладке (фильтрация) и измененную таблицу). Пользователь кликая на этот файл может открыть его с помощью моей программы, или открыть его внутри программы. Как вы думаете, возможно создать такой файл, или нужно отдельно сохранять в текстовом файле данные проекта(фильтрация, вкладки...) и отдельно измененную таблицу?
К сожалению такие файлы мне не встречались

Добавлено через 1 минуту
Есть конечно метод SaveToFile у компонента ADOTable, но я не уверен что это именно то что тебе нужно!!!!
0
 Аватар для nnnikotinnn995
7 / 7 / 4
Регистрация: 07.07.2011
Сообщений: 583
04.03.2014, 13:13  [ТС]
Вообще открыть отфильтрованную таблицу в новой вкладке можно так;
кидаем на форму компоненты ADOTable DBGrid и PageControl, и в кнопке пишем
C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
void __fastcall TForm1::Button1Click(TObject *Sender)
{
ADOTable2->Active = true;ADOTable2->Open();
 ADOTable2->Filtered=false;
   ADOTable2->Filter = "возраст < 55 AND возраст >5";
   ADOTable2->Filtered=true;
//-------------------
TTabSheet *page = new TTabSheet(Handle);page->Caption = "вкладка " +IntToStr(pagen->TabIndex+1);
page->PageControl = PageControl1;
PageControl1->ActivePageIndex = PageControl1->PageCount-1;
//-------------
DataSource1->DataSet=ADOTable2;
}
но для каждой вкладки при таком подходе нужно создавать свой ADOTable и при нажатие на вкладках придется в зависимости от PageControl1->ActivePageIndex менять DataSource1->DataSet что очень не удобно, как то так
C++ (Qt)
1
2
3
4
5
6
7
8
void __fastcall TForm1::PageControl1Change(TObject *Sender)
{
if(PageControl1->ActivePageIndex==0){
 DataSource1->DataSet=ADOTable1;
 }else  if(PageControl1->ActivePageIndex==1){DataSource1->DataSet=ADOTable2;
}else  if(PageControl1->ActivePageIndex==2){/*ADOTable3->Open();*/DataSource1->DataSet=ADOTable3;
 }
}
А если вкладок будет 100, выдержит ли программа 100 таблиц? Можно конечно все изменения сделать с одной таблицей ADOTable1 , но тогда все параметры фильтрации должны иметь свои переменные, видимо массивы надо писать, а при переключение вкладок придется вдобавок фильтрацию писать, код становится еще сложнее. Как то сложно все получается. Возможно ли как то попроще закрепить за вкладкой состояние (отфильтрованной) таблицы? И как вы думаете, как проще все сделать, с помощью одной таблицы ADOTable, или с помощью созданий новых таблиц?
0
 Аватар для Sasha
4956 / 2420 / 531
Регистрация: 05.06.2008
Сообщений: 7,518
Записей в блоге: 3
04.03.2014, 13:55
Цитата Сообщение от nnnikotinnn995 Посмотреть сообщение
А если вкладок будет 100, выдержит ли программа 100 таблиц?
Может и выдержит тебе самое главное то что ты создаёшь динамически, удалять тоже динамически.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
04.03.2014, 13:55
Помогаю со студенческими работами здесь

Как открывать на duckduckgo в новой вкладке?
Чтобы открывалось всё как в google.

[Selenium] Как открыть ссылку в новой вкладке?
Нужна помощь по селениуму. Прожка открывает сайтец в хроме и находит ссылки и кликает по ним по очередности. Мне нужно чтоб при клике...

Как можно открыть ссылку в новой вкладке Webbrowser?
Привет всем! Вопрос - как можно открыть ссылку в новой вкладке. Есть Webbrowser. _browser.DocumentCompleted +=...

Открытие новой страницы в новой вкладке
Открываю новую страницу с помощью Response.Redirect, но предыдушая страница закрывается. Что следует добавить в код чтобы новая стр...

Яндекс Браузер. Как открывать гугл ссылки на новой вкладке?
Поставил в яндекс браузере по умолчанию поиск гугл. Ввожу выражение для поиска в строке браузера вверху. Получаю поисковую выдачу гугла....


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

Или воспользуйтесь поиском по форуму:
18
Ответ Создать тему
Новые блоги и статьи
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru