Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Использование DevExpress (часть 3)

Модерирует : ShIvADeSt

ShIvADeSt (31-12-2009 04:49): Продолжаем тут http://forum.ru-board.com/topic.cgi?forum=33&topic=10884  Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 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 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121

   

golkanavt



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

Обмен опытом, обсуждение нюансов и решение проблем возникающих при использовании библиотеки компонент Developer Express




 
Сами прирученные компоненты частенько приходят на водопой сюда
 
DLL со скинами из библиотеки dxSkins, автор Ziltoid Подробнее... линк обновлен
Продолжение, Первая часть, вторая часть

Всего записей: 1069 | Зарегистр. 08-04-2002 | Отправлено: 10:31 07-02-2009 | Исправлено: vladman, 14:36 24-10-2009
dimm78

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Доброго времени суток всем!
Столкнулся со следующей проблемой:
 
есть 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, но из их обрывочной переписки немного не усек подвоха.
 
Буду очень благодарен за помощь.

Всего записей: 162 | Зарегистр. 07-12-2005 | Отправлено: 19:16 17-12-2009
sam291074



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
vladman
Спасибо за подсказку, хоть сижу на 2009, но ваш совет помог. Действительно Help проапдейтился и что нужно нашел.

Всего записей: 113 | Зарегистр. 22-03-2006 | Отправлено: 21:09 17-12-2009
xokc

Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
dimm78
Насколько я понимаю логику работы с DBGrid, добавление данных в нее должно происходить через методы DataSet.insert и DataSet.post , а не DataController.AppendRecord и DataController.Post. Ваш же пример характерен для работы с Grid в Unbound Mode и к базе данных отношения не имеет.

Всего записей: 476 | Зарегистр. 22-09-2002 | Отправлено: 22:16 17-12-2009
Graach



Junior Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
vladman
Огромное спасибо, работает как часы (настоящие швейцарские )

Всего записей: 111 | Зарегистр. 20-10-2007 | Отправлено: 23:12 17-12-2009
rokerr

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
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;
 
Помогите найти ошибочку... Заранее спасибо.

Всего записей: 13 | Зарегистр. 16-12-2009 | Отправлено: 09:39 18-12-2009
X11



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

Цитата:
OKBottomDlg1.cxLookupComboBox1.

В cxLookupComboBox1.EditValue будет значение ключевого поля.

----------
/не мы такие, жизнь такая/

Всего записей: 3253 | Зарегистр. 24-11-2005 | Отправлено: 10:14 18-12-2009
AvGSoft

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Кто в курсе как можно добраться до события OnNodeCheckChanged в TcxDBTreeList, в обычном TcxTreeList'е оно есть, а в DB нет.

Всего записей: 262 | Зарегистр. 03-07-2006 | Отправлено: 10:36 18-12-2009
volser

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
AvGSoft
Версию нужно уточнять. Если 5 то, это свойство protected, к нему можно обратиться с кода через доп. класс.

Всего записей: 713 | Зарегистр. 31-03-2006 | Отправлено: 11:29 18-12-2009
AvGSoft

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
volser
Спасибо, буду пробывать.  
PS версия 5.47

Всего записей: 262 | Зарегистр. 03-07-2006 | Отправлено: 11:50 18-12-2009
Andryshok



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Скажите как ето сделать, есть cxDBgrid, два датасурса, мастер и детал, как сделать чтоб в мастер гриде по нажатию на что нибудь отображался детал, ну типа такое небольшое дерево
 
Добавлено:
Здесь картинка того сто хочу сделать
http://www.onlinedisk.ru/image/296418/Безымянный.JPG

Всего записей: 649 | Зарегистр. 03-06-2009 | Отправлено: 13:54 18-12-2009
f3ka

Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Andryshok
надо прочитать справку по мастер-детайл в cxGride...
если коротко, то надо создать 2 уровня в cxGride, на каждом уровне создать необходимый View, дальше привязать DataSource... далее в справку...

Всего записей: 497 | Зарегистр. 02-03-2007 | Отправлено: 14:39 18-12-2009
AvGSoft

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Еще вопрос по TcxDBTreeList (v5.47) : организовал поиск используя FindNodeByText, все ищется нормально, фокус устанавливается на найденный узел, но приходиться ручками скролить если он нашелся за пределами видимой области. Уже и Focused ему делал и Selected курсор на нем стоит если ручками скролить, а автоматом не хочет. Где копать ?

Всего записей: 262 | Зарегистр. 03-07-2006 | Отправлено: 15:22 18-12-2009
f3ka

Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
AvGSoft
по моему где то в теме уже была данная проблема, помнится что было сказано либо ждать 48 версию, либо применить фикс, который доступен для рег юзеров...

Всего записей: 497 | Зарегистр. 02-03-2007 | Отправлено: 15:31 18-12-2009
AvGSoft

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
f3ka
А фикс не пробегал, а то стрелками с клавиатуры если двигать такая же малина, курсор уходит за видимую область и все, связь по мастер-детайл работает и инфа светиться, а активная запись не видна

Всего записей: 262 | Зарегистр. 03-07-2006 | Отправлено: 17:17 18-12-2009
afiget



Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Всем привет.
 
Есть проблема с TcxEditRepositoryLookupComboBoxItem.
 
Почему то в нижеприведенном коде строка

Код:
spDesignBasic.Locate('design_ean', OldLookupValue, []);

, где spDesignBasic - DataSet, на основе которого построен LookupComboBox, работает только при LookupComboBox.Properties.GridMode=false.
При GridMode=true метод Locate возвращает true (т.е запись вроде бы найдена), но не перемещает курсор на на найденную запись, как ожидалось.
В чем причина такой странной зависимости поведения DataSet от стороннего компонента TcxEditRepositoryLookupComboBoxItem?
 
Суть кода: открыть модальное окно выбора из DataSet, предварительно спозиционировав DataSet на указанную запись по значению OldLookupValue, внести изменения в редактируемый набор данных.

Код:
 
procedure TMainForm.erDesignBasicLookupPropertiesInitPopup(
  Sender: TObject);
var LookupValue, OldLookupValue: Variant;
    col: TcxGridDBColumn;
    view: TcxGridDBTableView;
begin
    inherited;
    if Sender is TcxLookupComboBox then
    begin
        if TcxLookupComboBox(Sender).Owner is TcxGridDBTableView then
        begin
            view:=TcxGridDBTableView(TcxLookupComboBox(Sender).Owner);
            if view.DataController.Controller.FocusedItem is TcxGridDBColumn then
            begin
                col:=TcxGridDBColumn(view.DataController.Controller.FocusedItem);
                OldLookupValue:=FieldValue(TCustomMSDataSet(view.DataController.DataSource.DataSet), col.Databinding.FieldName);
 
                spDesignBasic.Locate('design_ean', OldLookupValue, []);
                LookupValue := OpenLookupDataSet('design', spDesignBasic, OldLookupValue);
 
                if (view.DataController.DataSource.DataSet.State<>dsEdit) then
                    view.DataController.DataSource.DataSet.Edit;
                if (not VarIsNull(LookupValue))and(OldLookupValue<>LookupValue) then
                begin
                    view.DataController.DataSource.DataSet.FieldByName(col.Databinding.FieldName).Value:=LookupValue;
                end;
                Abort;
            end;
        end;
    end;
end;
 

, где OpenLookupDataSet открывает модальное окно выбора из списка данных spDesignBasic.
 
ЗЫ
GridMode=true мне нужен, т.к. редактирование в гриде существенно тормозит в больших документах при включенной сортировке по колонке, к которой прикручен LookupComboBox. Этот совет о GridMode вычитал на сайте поддержки.

Всего записей: 545 | Зарегистр. 31-12-2005 | Отправлено: 17:27 18-12-2009 | Исправлено: afiget, 17:48 18-12-2009
volser

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
afiget
Если у вас GridMode = true, то лукапные поля нужно создавать в основном наборе данных и LookupComboBox прикрутить на это поле.

Всего записей: 713 | Зарегистр. 31-03-2006 | Отправлено: 17:49 18-12-2009
afiget



Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
volser
Что-то я не совсем понял вашу мысль.
 
Еще раз вкратце опишу проблему немного шире.
Есть View. Есть поле в View, у которого установлен RepositoryItem, который имеет тип TcxEditRepositoryLookupComboBoxItem. В свойствах EditRepositoryLookupComboBox (не View!) установлен GridMode=true.
При этом источник данных, который наполняет EditRepositoryLookupComboBox не отрабатывает метод Locate. А если установить GridMode=false, то все работает.
Отсюда вопрос, почему визуальный контрол влияет на внутренний метод DataSet, вызываемый напрямую?
И почему это влияние появляется при определенной настройке?
Ну и, конечно, как бороться с этой проблемой?

Всего записей: 545 | Зарегистр. 31-12-2005 | Отправлено: 01:32 19-12-2009
vladman

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
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;

Всего записей: 708 | Зарегистр. 13-11-2002 | Отправлено: 17:57 19-12-2009 | Исправлено: vladman, 18:34 19-12-2009
tanaseduard



Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Есть ли русики(желательно pas)  для 47 сборки?

Всего записей: 518 | Зарегистр. 21-11-2009 | Отправлено: 19:06 19-12-2009
vladman

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
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

Цитата:
Отсюда вопрос, почему визуальный контрол влияет на внутренний метод DataSet, вызываемый напрямую?
И почему это влияние появляется при определенной настройке?  

ms-help://borland.bds5/ExpressEditors.BDS5/ExpressEditors/IDH_TcxLookupComboBoxProperties_GridMode.htm
TcxLookupComboBoxProperties.GridMode
Grid Mode imposes some restrictions on working with the editor and lookup dataset:
...
you must not navigate the lookup dataset programmatically as this can conflict with the Locate method used by the editor itself.

Цитата:
Ну и, конечно, как бороться с этой проблемой?

Если у вас действительно большой набор данных для lookup (именно для lookup, т.е. datasets displayed in the dropdown), и использование GridMode = True действительно необходимо, то попробуйте выполнять spDesignBasic.Locate('design_ean', OldLookupValue, []) уже при onCreate или onShow модального окна выбора из списка данных spDesignBasic.

Всего записей: 708 | Зарегистр. 13-11-2002 | Отправлено: 19:12 19-12-2009 | Исправлено: vladman, 19:12 19-12-2009
   

Страницы: 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 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121

Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Использование DevExpress (часть 3)
ShIvADeSt (31-12-2009 04:49): Продолжаем тут http://forum.ru-board.com/topic.cgi?forum=33&topic=10884


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2024

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru