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

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

Автор: dimm78
Дата сообщения: 17.12.2009 18:16
Доброго времени суток всем!
Столкнулся со следующей проблемой:

есть cxDBTableView привязанная к FIBDataSet. В цикле в нее загоняются данные следующим образом:

while <УСЛОВИЕ> do
begin
ARecIndex := cxView.DataController.AppendRecord;

//далее установка значений новой строки
for i to <>.Count - 1 do
cxView.DataController.Values[ARecIndex, i] := <ЗНАЧЕНИЕ[i]>;

cxView.DataController.Post;
end;

Записи вставляются практически мгновенно, отображаются все, но в базу после подтверждения транзакции не попадают. Судя по всему что-то делаю не так.

Нашел обсуждение подобного случая в версии для печати между X11 и vladman, но из их обрывочной переписки немного не усек подвоха.

Буду очень благодарен за помощь.
Автор: sam291074
Дата сообщения: 17.12.2009 20:09
vladman
Спасибо за подсказку, хоть сижу на 2009, но ваш совет помог. Действительно Help проапдейтился и что нужно нашел.
Автор: xokc
Дата сообщения: 17.12.2009 21:16
dimm78
Насколько я понимаю логику работы с DBGrid, добавление данных в нее должно происходить через методы DataSet.insert и DataSet.post , а не DataController.AppendRecord и DataController.Post. Ваш же пример характерен для работы с Grid в Unbound Mode и к базе данных отношения не имеет.
Автор: Graach
Дата сообщения: 17.12.2009 22:12
vladman
Огромное спасибо, работает как часы (настоящие швейцарские )
Автор: rokerr
Дата сообщения: 18.12.2009 08:39
Vladman, спасибо большое, все работает как часы. Т.к. с компонентми только начал разбираться возник еще один вопрос с использованием cxLookupComboBox. Есть код, fibPeredelList привязан к cxLookupComboBox1. Проблема в том, что какое бы значение не было выбрано из cxLookupComboBox1, при значение OKBottomDlg1.cxLookupComboBox1.Properties.DataController.GetKeyFieldsValues равно 1.

with DataModule2 do
begin
if fibPeredelList.Active then fibPeredelList.Close;
fibPeredelList.Params[0].Value:=cxGrid1DBTableView1.DataController.Controller.SelectedRecords[0].Values[1];
fibPeredelList.Open;
end;
OKBottomDlg1.ShowModal;
with DataModule2 do
if OKBottomDlg1.ModalResult = mrOK then
begin
fibUpdMovePasp.Params[0].Value:='';
fibUpdMovePasp.Params[1].Value:='';
fibUpdMovePasp.Params[0].Value:= OKBottomDlg1.cxLookupComboBox1.Properties.DataController.GetKeyFieldsValues;

Помогите найти ошибочку... Заранее спасибо.
Автор: X11
Дата сообщения: 18.12.2009 09:14

Цитата:
OKBottomDlg1.cxLookupComboBox1.

В cxLookupComboBox1.EditValue будет значение ключевого поля.
Автор: AvGSoft
Дата сообщения: 18.12.2009 09:36
Кто в курсе как можно добраться до события OnNodeCheckChanged в TcxDBTreeList, в обычном TcxTreeList'е оно есть, а в DB нет.
Автор: volser
Дата сообщения: 18.12.2009 10:29
AvGSoft
Версию нужно уточнять. Если 5 то, это свойство protected, к нему можно обратиться с кода через доп. класс.
Автор: AvGSoft
Дата сообщения: 18.12.2009 10:50
volser
Спасибо, буду пробывать.
PS версия 5.47
Автор: Andryshok
Дата сообщения: 18.12.2009 12:54
Скажите как ето сделать, есть cxDBgrid, два датасурса, мастер и детал, как сделать чтоб в мастер гриде по нажатию на что нибудь отображался детал, ну типа такое небольшое дерево

Добавлено:
Здесь картинка того сто хочу сделать
http://www.onlinedisk.ru/image/296418/Безымянный.JPG
Автор: f3ka
Дата сообщения: 18.12.2009 13:39
Andryshok
надо прочитать справку по мастер-детайл в cxGride...
если коротко, то надо создать 2 уровня в cxGride, на каждом уровне создать необходимый View, дальше привязать DataSource... далее в справку...
Автор: AvGSoft
Дата сообщения: 18.12.2009 14:22
Еще вопрос по TcxDBTreeList (v5.47) : организовал поиск используя FindNodeByText, все ищется нормально, фокус устанавливается на найденный узел, но приходиться ручками скролить если он нашелся за пределами видимой области. Уже и Focused ему делал и Selected курсор на нем стоит если ручками скролить, а автоматом не хочет. Где копать ?
Автор: f3ka
Дата сообщения: 18.12.2009 14:31
AvGSoft
по моему где то в теме уже была данная проблема, помнится что было сказано либо ждать 48 версию, либо применить фикс, который доступен для рег юзеров...
Автор: AvGSoft
Дата сообщения: 18.12.2009 16:17
f3ka
А фикс не пробегал, а то стрелками с клавиатуры если двигать такая же малина, курсор уходит за видимую область и все, связь по мастер-детайл работает и инфа светиться, а активная запись не видна
Автор: afiget
Дата сообщения: 18.12.2009 16:27
Всем привет.

Есть проблема с TcxEditRepositoryLookupComboBoxItem.

Почему то в нижеприведенном коде строка

Код: spDesignBasic.Locate('design_ean', OldLookupValue, []);
Автор: volser
Дата сообщения: 18.12.2009 16:49
afiget
Если у вас GridMode = true, то лукапные поля нужно создавать в основном наборе данных и LookupComboBox прикрутить на это поле.
Автор: afiget
Дата сообщения: 19.12.2009 00:32
volser
Что-то я не совсем понял вашу мысль.

Еще раз вкратце опишу проблему немного шире.
Есть View. Есть поле в View, у которого установлен RepositoryItem, который имеет тип TcxEditRepositoryLookupComboBoxItem. В свойствах EditRepositoryLookupComboBox (не View!) установлен GridMode=true.
При этом источник данных, который наполняет EditRepositoryLookupComboBox не отрабатывает метод Locate. А если установить GridMode=false, то все работает.
Отсюда вопрос, почему визуальный контрол влияет на внутренний метод DataSet, вызываемый напрямую?
И почему это влияние появляется при определенной настройке?
Ну и, конечно, как бороться с этой проблемой?
Автор: vladman
Дата сообщения: 19.12.2009 16:57
BECHA1

Цитата:
В дизайнере они (колонки) легко добавляются/удаляются, а вот как это сделать из самой программы? В свойствах объекта ничего похожего на Columns.Add/Delete/Clear/Remove и т.д. нету.

Ну раз они добавляются/удаляются в дизайнтайме - точно такие методы существуют. Вы их не для того объекта ищите. Обратите внимание на <YourdxDBTreeList>.DataController.CreateAllItems/RemoveItem

Добавлено:
maratea

Цитата:
В excel мне нужно вывести только 2 белые строчки. А я не могу! ...
Я чувствую, что Values - это не то, а истина где-то рядом...

Попробуйте так:

Код: var
i: Integer;
vValue: Variant;
begin
with <YourcxGridTableView>.DataController do
begin
Groups.FullExpand;
for i := 0 to RowCount - 1 do
if GetRowInfo(i).Level = Groups.GroupingItemCount then // проверяем, что it is not grouping Row
begin
vValue := GetRowValue(GetRowInfo(i), <YourVremyaRabotyColumn>.index);
// SaveToExcel(vValue);
vValue := GetRowValue(GetRowInfo(i), <YourVremyaProstoyaColumn>.index);
// SaveToExcel(vValue);
end;
end;
end;
Автор: tanaseduard
Дата сообщения: 19.12.2009 18:06
Есть ли русики(желательно pas) для 47 сборки?
Автор: vladman
Дата сообщения: 19.12.2009 18:12
AvGSoft

Цитата:
Кто в курсе как можно добраться до события OnNodeCheckChanged в TcxDBTreeList, в обычном TcxTreeList'е оно есть, а в DB нет.

volser прав, это легко можно реализовать через доступ к protected свойству объекта.
Как работает такой механизм можно посмотреть, например, здесь: How to access a protected class member.
Сама реализация может выглядеть так:

Код: type
TcxCustomTreeListAccess = class(TcxCustomTreeList);
...
type
<YourTForm> = class(TForm)
....
....
procedure DoNodeCheckChanged(Sender: TcxCustomTreeList; ANode: TcxTreeListNode; AState: TcxCheckBoxState);
end;

procedure <YourForm>.DoNodeCheckChanged(Sender: TcxCustomTreeList; ANode: TcxTreeListNode; AState: TcxCheckBoxState);
begin
// if AState = cbsChecked then ShowMessage('Checked');
// if AState = cbsUnChecked then ShowMessage('UnChecked');
if not <YourDBTreeList>.<в стадии первоначальной загрузки> then SaveStateToDB(ANode, AState); //например.
end;

procedure <YourForm>.FormCreate(Sender: TObject);
begin
...
TcxCustomTreeListAccess(<YourDBTreeList>).OnNodeCheckChanged := DoNodeCheckChanged;
end;
Автор: afiget
Дата сообщения: 19.12.2009 23:50
vladman
Спасибо, слона то я и не заметил.
В принципе, я уже наметил один из вариантов решения проблемы - клонировать датасет и с клоном работать. Это, конечно, скажется на потреблении памяти, но в моем случае вполне допустимо.
И попробую изменить логику согласно вашему рецепту.
Автор: afiget
Дата сообщения: 20.12.2009 22:49
Сработало вроде нормально позиционирование датасет в OnShow формы
Автор: OwnerZ
Дата сообщения: 21.12.2009 10:59
Добрый день!

Подскажите пожалуйста если я хочу чтобы в VerticalGride поле было как информационое не привязано к базе а к выбранному query например как в EHlibe LookupComboboxEh в нем можно не указывать основной DataField а завязав с query выбора, listFild будет показывать данные при выборе.
немогу добится тогоже в VerticalGride

Или другой вариант поставил EditProperties как DAteEdit програмно изменяю его на нужную мне дату и дата все равно не отображается.

В общем вопрос где указать или что за поле в VerticalGride в котором я могу отображать данные вставленные из вне не привязывая за основной DataField?

Спасибо.
Автор: X11
Дата сообщения: 21.12.2009 11:18

Цитата:
как в EHlibe LookupComboboxEh

Ну так и выбери в EditProperties LookupComboBox

Добавлено:

Цитата:
данные вставленные из вне не привязывая за основной DataField?

А просто Combobox
Автор: OwnerZ
Дата сообщения: 21.12.2009 11:26
X11


Цитата:
Цитата:
как в EHlibe LookupComboboxEh

Ну так и выбери в EditProperties LookupComboBox

Добавлено:

Цитата:
данные вставленные из вне не привязывая за основной DataField?

А просто Combobox


1. 2ва LookupComboBox привязанных к query первый завязан за DataField второй нет
выбираю в 1м и в обработчике CloseUp пишу TcxLookupCombobox(поле).EditValue = Значение из query.
в первом LookupComboBox все оки то что нужно
второй пустой.

Подскажи пожалуйста что делаю не так


Добавлено:
дело в том что он мне пишет что TcxLookupCombobox(поле).EditValue Unassigned типо программа ваще непонимает что я от неё хочу
Автор: X11
Дата сообщения: 21.12.2009 11:36
Что за детсад.


Цитата:
2ва LookupComboBox привязанных к query


Цитата:
второй нет


Цитата:
второй пустой.

Ты сам-то прочитал своё сообщение?
Если нет, то поясняю:
Ты отключил от датасета список и поэтому в списке нет ничего.
Если нужно список наполнять ручками, что, прочитай моё сообщение выше.



Добавлено:
OwnerZ, скачай и посмотри примеры работы с VG
Автор: OwnerZ
Дата сообщения: 21.12.2009 11:38
значит в списке выпадающем есть данные но они никак не вставляются в поле может где надо какой признак указать в true или false

Добавлено:
Может я неправильно написал. Звеняюсь.

Ситуация такая список то полный данными но они не отображаются. Это вкраце.

То есть сама строка EditorRow пустая. А как туда запихнуть эти данные????

Добавлено:
или как запихнуть выбранную запись в EditorRow при учете что DataField неуказан

Добавлено:
если тип EditProperties TcxLookupCombobox
Автор: vladman
Дата сообщения: 21.12.2009 12:41
OwnerZ

Цитата:
Подскажите пожалуйста если я хочу чтобы в VerticalGride поле было как информационое не привязано к базе а к выбранному query

Если я вас правильно понял, вы хотите в TcxDBVerticalGrid добавить unbound row, верно?
Если да, то в текущей версии DevExpress это не представляется возможным.
Подробнее: Unbound row in a TcxDBVerticalGrid
Автор: AvGSoft
Дата сообщения: 21.12.2009 12:43
Народ, есть такой вопрос: каким образом можно выдернуть цвета элементов TdxBar к которому применен скин.
Пытаюсь через это:
ASkin = APainterInfo->Skin;
Color = ASkin->GetGroupByName("Bars")->GetElementByName("ContentColor")->Color;
но че-то не все получается выдернуть.
Автор: OwnerZ
Дата сообщения: 21.12.2009 13:09

Цитата:
vladman

Full Member    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модераторуOwnerZ

Цитата:
Подскажите пожалуйста если я хочу чтобы в VerticalGride поле было как информационое не привязано к базе а к выбранному query

Если я вас правильно понял, вы хотите в TcxDBVerticalGrid добавить unbound row, верно?
Если да, то в текущей версии DevExpress это не представляется возможным.
Подробнее: Unbound row in a TcxDBVerticalGrid


прочел

Спасибо


Надо раздобыть более позднею версию я так понял?

Страницы: 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081

Предыдущая тема: Delphi: tcp клиент в потоке


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