Ru-Board.club
← Вернуться в раздел «Прикладное программирование»

» Использование DevExpress (часть 4)

Автор: Real11
Дата сообщения: 25.04.2010 15:52
а как отфильтровать в cxGrid?
есть переменная id
есть cxGrid
необходимо найти в первом столбце cxGrid строчку со значением равным id.

Автор: indapublic
Дата сообщения: 25.04.2010 16:10
Real11, используйте Locate у датасета
Автор: marser
Дата сообщения: 25.04.2010 16:11
Real11
Так "отфильтровать" или "найти"?
В компоненте cxGrid нет строк и столбцов.
cxGrid это контейнер для компонентов cxGridTableView, cxGridDBTableView, cxGridBandedTableView и т.д. Вопрос сформулирован некорректно.
Автор: linker_2009
Дата сообщения: 25.04.2010 16:16
volser

Цитата:
Я написал как нужно правильно делать. Через доп. поле.


Цитата:
В запросе сделать доп. поле которое слепит три поля и настроить отображение на него.


ИMХО костыль, не универсально. Самим cxLookupComboBox бы реализовать. Думал может както можно настроить.
Автор: Real11
Дата сообщения: 25.04.2010 16:21

Цитата:
Так "отфильтровать" или "найти"?
В компоненте cxGrid нет строк и столбцов.
cxGrid это контейнер для компонентов cxGridTableView, cxGridDBTableView, cxGridBandedTableView и т.д. Вопрос сформулирован некорректно.

стараюсь как могу )))
DimForm:=TDimForm.Create(Owner);
id := DataModule2.GeneralQuery.FieldValues['ID2'];
DimForm:=TDimForm.Create(Owner);
DimForm.cxGrid1DBTableView1.DataController.........:= ID; -- вот эту строчку я незнаю
.......

Надо, чтобы переменная id сделала активным запись Грида, у которой значение столбца 1 равно значению id.
Далее пойдет определенный процесс
Автор: linker_2009
Дата сообщения: 25.04.2010 16:30
Real11
Тебе уже ответили что через locate надо.
вместо DimForm.cxGrid1DBTableView1.DataController.........:= ID;
<DataSet>.Locate('id',id,[]);
где <DataSet> тот датасет который присоединен к DimForm.cxGrid1DBTableView1

Добавлено:
или можно так (не проверял)
DimForm.cxGrid1DBTableView1.DataController.DataSource.DataSet.Locate('id',id,[]);
Автор: marser
Дата сообщения: 25.04.2010 17:10
Real11
Если не устраивает ответ linker_2009, то могу предложить следующее:
Если cxGrid1DBTableView1.DataController.KeyFieldNames = 'ID2', то
cxGrid1DBTableView1.DataController.LocateByKey(id);
Если cxGrid1DBTableView1.DataController.KeyFieldNames <> 'ID2', то
I := cxGrid1DBTableView1.DataController.FindRecordIndexByText( ... );
if I > -1 then
cxGrid1DBTableView1.DataController.FocusedRecordIndex := I;

Добавлено:
linker_2009
Если cxGrid1DBTableView1.DataController.DataModeController.SyncMode := False, то
DataSet.Locate не сработает.
Автор: crazypiggy
Дата сообщения: 25.04.2010 18:49
Добрый день. У меня такой вопрос: есть форма на которой лежит FIBDataset. В нем проводится выборка множества записей по запросу. Также лежат cxDBTextEdit которые привязаны к этому FIBDataset. Хотел сделать перемещение по этому FIBDataset в виде выпадающего комбобокса, но чтото никак не могу понять как это сделать?Ставлю Lookup но ему нужен второй датасет, а просто комбобокс надо вручную заполнять. Пожалуйста объясните как мне решить эту проблемку?!!!
Автор: marser
Дата сообщения: 25.04.2010 19:26
crazypiggy

type
cxLookupComboBox1: TcxLookupComboBox;
DataSource1: TDataSource;


DataSource1.DataSet := FIBDataSet;
cxLookupComboBox1.Properties.ListSource := DataSource1;
cxLookupComboBox1.Properties.KeyFieldNames := 'KeyFieldName';
with cxLookupComboBox1.Properties.ListColumns.Add do
FieldName := 'XXXX';
cxLookupComboBox1.Properties.ImmediatePost := True;


procedure TForm1.cxLookupComboBox1PropertiesChange(Sender: TObject);
begin
if cxLookupComboBox1.ModifiedAfterEnter then
FIBDataSet.Locate('KeyFieldName', cxLookupComboBox1.EditValue);
end;
Автор: linker_2009
Дата сообщения: 25.04.2010 19:35
crazypiggy
или воспльзуитесь cxExtLookupComboBox
Автор: JohnSilver182
Дата сообщения: 25.04.2010 20:46
Hi
Про ImmediatePost , черкните своими словами что это . Я буржуйский со словарем не понимаю.
Автор: marser
Дата сообщения: 25.04.2010 21:12
JohnSilver182
Если ImmediatePost := True, то в EditValue загоняется вводимое значение непосредственно в момент ввода символов, а если ImmediatePost := False, то при потере фокуса (например, при переходе на другой элемент редактирования) или при нажатии Enter.
Автор: V1s1ter
Дата сообщения: 26.04.2010 10:10

Цитата:
Подскажите чегото после обновление с 47 на 49 версию Printing System перестал печатать. Предварительный просмотр все в норме, но с принтера пустые листы лезут. Если сохранять (средвствами Printing System) в pdf, то все в норме. Коды еще не смотрел, но может кто уже знает где собака порылась?

Выяснил, что, покрайней мере у меня, печатается на локальных принтерах, а на сетевых нет. Засада
Автор: Real11
Дата сообщения: 26.04.2010 15:53

Цитата:
Если cxGrid1DBTableView1.DataController.DataModeController.SyncMode := False, то
DataSet.Locate не сработает.

сделал это свойство true? но все равно не работает?!
Может что с последовательностью не так?

DimForm:=TDimForm.Create(Owner);
id := DataModule2.GeneralQuery.FieldValues['ID2'];
DimForm:=TDimForm.Create(Owner);
cxGrid1DBTableView1.DataController.DataModeController.SyncMode := True;
DimForm.cxGrid1DBTableView1.DataController.DataSource.DataSet.Locate('id',id,[]);

Хотя пробывал разные расстановки. Вообщем активной становится первая запись в таблице, а не та которой соответствует значение id
Автор: X11
Дата сообщения: 26.04.2010 16:05
а что указано в свойстве cxGrid1DBTableView1.DataController.DataModeController.KeyFieldNames?
Автор: Real11
Дата сообщения: 26.04.2010 16:13

Цитата:
а что указано в свойстве cxGrid1DBTableView1.DataController.DataModeController.KeyFieldNames?

указано или "ничего" или поле "ID" таблицы. Пробывал оба варианта
Автор: marser
Дата сообщения: 26.04.2010 16:24
Real11
DimForm.cxGrid1DBTableView1.DataController.DataSource.DataSet.Locate('ID2', id,[]);
Автор: Real11
Дата сообщения: 26.04.2010 16:57

Цитата:
Real11
DimForm.cxGrid1DBTableView1.DataController.DataSource.DataSet.Locate('ID2', id,[]);

Что-то не пойму, причем тут ID2 ?
Мы ведь параметру id присвоили значение id := DataModule2.GeneralQuery.FieldValues['ID2'];
DataSet.Locate('ID', id,[]);
тут:
'ID' - столбец в гриде по которому ищем
id - переменная, соответствие которой ищем в этом столбце
Чтобы избежать путаницу, столбец в котором ищем, назову id_st .
Тогда
var
id : string;
begin
DimForm:=TDimForm.Create(Owner);
id := DataModule2.GeneralQuery.FieldValues['ID2'];
DimForm:=TDimForm.Create(Owner);
cxGrid1DBTableView1.DataController.DataModeController.SyncMode := True;
DimForm.cxGrid1DBTableView1.DataController.DataSource.DataSet.Locate('id_st', id,[]);
......
Автор: SIgor33
Дата сообщения: 27.04.2010 11:13
У flowchart точки соединений TdxFcConnection жестко заданны 15 вариантами при соединении двух объектов а можно ли как использовать чтобы точка была в указанна мной т.е я задам ее кооординаты
Автор: mdid
Дата сообщения: 27.04.2010 11:32
не подскажите как разрулить ситуацию
юзер сделал фильтр(cxGrid)..из фильтра выбрал документ на изменение...изменил..сохранил(соответственно новый селект) и фильтр сбрасывается..как я не крутил я не смог найти как получить инфу о тек фильтре(кроме названия)..вопрос...как получить указатель на колонку по которой идет фильтр...или как получить сам фильтр и как его вернуть на место?
Автор: X11
Дата сообщения: 27.04.2010 12:21

Цитата:
как его вернуть на место?

в смысле сбросить, отключить?

DataController.Filter.Active := false;
DataController.Filter.Root.Clear;

далее
DataController.Filter.Root.Criteria
DataController.Filter.Root.Items[i]
и т.д.
Автор: mdid
Дата сообщения: 27.04.2010 12:27
нет..после обновления(нового select из базы) фильтр сам сбрасывается...мне надо сохранить значение до select и восстановить его опосля все того же select...
просто девушка отфильтровала...изменила запись..а оно бах...и все скинулось...и тут на меня полетели тапки
Автор: X11
Дата сообщения: 27.04.2010 12:38
Т.е. после переоткрытия набора данных, к которому привязан грид фильтр сам по себе сбрасывается?
Автор: mdid
Дата сообщения: 27.04.2010 12:45
угу...наверно дело в том что этот грид(DB) используется для разных таблиц...и для того что бы колонки не суммировались при каждом обновлении я пишу

Код:
cxGrid1DBTableView1.ClearItems;
cxGrid1DBTableView1.DataController.CreateAllItems(False);
Автор: X11
Дата сообщения: 27.04.2010 13:17
Можно попробовать скрестить cxPropertiesStore для сохранения свойств объектов фильтра(ов)
Автор: Cryogen2003
Дата сообщения: 27.04.2010 13:31
X11
Кстати, а как сделать в cxPropertiesStore сохранение параметров из грида, но при этом, если были на форме добавлены новые колонки, то они автоматом подхватывались в cxPropertiesStore. А то сейчас делаешь сохранение грида в cxPropertiesStore, но если добавляешь новую колонку в грид, то после загрузки cxPropertiesStore, колонка разумеется отсутствует в гриде. Как быть?
Автор: afiget
Дата сообщения: 27.04.2010 13:31

Цитата:
то есть очищаю поля и создаю заново

Конечно, фильтры удаляются.
Сделайте поиск по предыдущим частям ветки, процедуры сохранения и восстановления фильтров в рантайм уже приводились. Если не ошибаюсь, то ли в 3, то ли во 2 части.
Автор: X11
Дата сообщения: 27.04.2010 13:38

Цитата:
Кстати, а как сделать в cxPropertiesStore сохранение параметров из грида

Не знаю, я грид сохраняю средствами самого грида. У грида есть такие методы.
А cxPropertiesStore считаю не самым удачным решением для сохранения/восстановления настроек (и глюковат он при восстановлении параметров формы), хотя бы по сравнению с похожим компонентом из EhLib. Ну это моё скромное мнение, и основано оно лишь на скромном опыте работы с cxPropertiesStore.
Автор: Cryogen2003
Дата сообщения: 27.04.2010 13:42
X11
а у него нормально проходит такой момент, который я описал?
Автор: indapublic
Дата сообщения: 27.04.2010 14:08

Цитата:
наверно дело в том что этот грид(DB) используется для разных таблиц...и для того что бы колонки не суммировались при каждом обновлении я пишу...то есть очищаю поля и создаю заново


Я бы избавился от этого. Каждая вьюшка на каждый набор данных

Добавлено:

Цитата:
а у него нормально проходит такой момент, который я описал?

View.StoreToRegistry / StoreToIniFile и View.RestoreFromIniFile / RestoreFromRegistry

Но это тоже не панацея. Да и есть парочка "но" при таком использовании


Добавлено:

Цитата:
но если добавляешь новую колонку в грид, то после загрузки cxPropertiesStore, колонка разумеется отсутствует в гриде. Как быть?

Мало того... Если вы измените в дизайн-тайме Properties колонки, то в рантайме (в случае автоматической загрузки) вас ждет старый вид грида. Это свойственно и cxPropertiesStore, и функциям сохранения/загрузки от View

Страницы: 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211

Предыдущая тема: Помогите пожалуйста с блокировкой клавиатуры и мышки


Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.