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

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

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

ShIvADeSt (29-01-2007 03:17): идем сюда
http://forum.ru-board.com/topic.cgi?forum=33&topic=7918
 Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 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

   

golkanavt



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

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




 
Сами прирученные компоненты частенько приходят на водопой сюда

Всего записей: 1069 | Зарегистр. 08-04-2002 | Отправлено: 10:42 08-10-2003 | Исправлено: golkanavt, 15:41 08-09-2006
yuish

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
подскажите как в cxGrid обработать MultiSelect.
Задача - берем и перетягиваем ДрагЭндДропом записи в другое место, они должны как то обработаться. С одной записью - сделал. а с кучей?

Всего записей: 218 | Зарегистр. 10-02-2003 | Отправлено: 17:58 25-08-2006
korobovmax



Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
yuish, перебираем SelectedRecords, получаем их индексы (В гриде), с помощью GetRecordByID (см. help) получаем табличные индексы. Дальше с помощью "теневой" таблицы ворочаем записи.

Всего записей: 276 | Зарегистр. 23-01-2005 | Отправлено: 18:48 25-08-2006
golkanavt



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

Всего записей: 1069 | Зарегистр. 08-04-2002 | Отправлено: 19:14 25-08-2006
jicoff

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

Всего записей: 289 | Зарегистр. 03-03-2006 | Отправлено: 20:28 25-08-2006
Daeron

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Есть TcxDBTreeList.
Есть кнопка добавления записи которая делает Insert в таблицу на которой висит TcxDBTreeList.  
Как сделать так, что бы добавляемое поле НЕ становилось ROOT для всех записей?

Всего записей: 76 | Зарегистр. 10-06-2005 | Отправлено: 17:03 26-08-2006
jicoff

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Daeron
 
Так значения в KeyField и ParentField надо выставлять сразу, а то они, наверное, NULL, вот встают вначало.

Всего записей: 289 | Зарегистр. 03-03-2006 | Отправлено: 19:07 26-08-2006
Daeron

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Сразу где?  
В СУБД - не понятно как. До .Append - тоже неясно, делаю AfterInsert - поздно, запись становится корневой для всех.
Пытался делать что-то по типу .FullRefresh; - пропадает запись вообще.

Всего записей: 76 | Зарегистр. 10-06-2005 | Отправлено: 20:47 26-08-2006 | Исправлено: Daeron, 20:48 26-08-2006
Alex1978

Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Daeron
В событии OnNewRecord - если есть такое в твоей СУБД.

Всего записей: 307 | Зарегистр. 27-02-2003 | Отправлено: 09:25 28-08-2006
unfreqient



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Для себя решил проблему так (правдо у меня источник через ADOData Set):
  cxDBTreeList1.DataController.Insert;
  cxDBTreeList1.DataController.DataSource.DataSet.FieldByName('NODE').Value:=NewVal;
  cxDBTreeList1.DataController.Post;
при таком решении всё вставляется в "фокус". Конечно, должны быть указаны поля KeyField и ParentField.

Всего записей: 104 | Зарегистр. 20-07-2006 | Отправлено: 10:01 28-08-2006
hobest

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
unfreqient
 
У такого решения есть одна проблема: необходимо знать значение нового идентификатора, а без обращения к базе никак его не получить. К тому же есть еще проблема, в многопользовательском режиме не совсем ясно, даже при обращении к базе, как его получить.
 
Есть конечно решение, например, выяснить максимальное значение ключа из датасета, на всякий случай прибавить константу, скажем 1000, далее как предлогает unfreqient, а там в зависимости от ситуации: получить значение и подправить поле.
 
Сам предпочитаю модальный диалог, даже если в дереве нужно только название узла вставить.

Всего записей: 86 | Зарегистр. 20-03-2006 | Отправлено: 03:33 29-08-2006
uranic2

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

Цитата:
У такого решения есть одна проблема: необходимо знать значение нового идентификатора, а без обращения к базе никак его не получить. К тому же есть еще проблема, в многопользовательском режиме не совсем ясно, даже при обращении к базе, как его получить.  

Это зависит от того какая у тебя база и что у тебя за идентификатор
В БД в которых есть sequnce (Oracle, Interbase (Firebird) и т.п.) , берем следующее значение из этого sequence.  Изпользовать max - потенциальный сточник граблей при многопользовательской работе. Вот тут поднял проект - как раз добавление в дереве как потомок если установлено FAsChild:=True. Соответсвенно на датасет вешается два обработчика  
 
var
     FAsChild: boolean; // для добавления деревьев
 
 
procedure TdmMain.fdsTreeBeforeInsert(DataSet: TDataSet);
begin
  IF DataSet.REcordCount<>0 then
  begin
    FID_Tree:= DataSet.FieldValues['ID'];
    if not DataSet.FieldByName('ID_PARENT').IsNull then
      FID_PARENT:=DataSet.FieldValues['ID_PARENT']
    else
      FID_PARENT:=0;
  end
  else
  begin
    FID_TREE:= 0;
    FID_PARENT:=0;
  end;
end;
//------------------------------------------------------------------------------
procedure TdmMain.fdsTreeNewRecord(DataSet: TDataSet);
begin
  if FAsChild then
  begin
    if FID_TRee<>0 then DataSet.FieldValues['ID_PARENT']:=FID_TREE;
  end
  else
    if FID_PARENT<>0 then DataSet.FieldValues['ID_PARENT'] := FID_PARENT;
end;
 
 
Добавлено:
hobest

Цитата:
К тому же есть еще проблема, в многопользовательском режиме не совсем ясно, даже при обращении к базе, как его получить.

 
Для MSSQL тоже можно извернуться и получить значение identy, но здесь врать не буду, потому как не помню.
На крайний случай всегда можно испольовать GUID

Всего записей: 298 | Зарегистр. 17-08-2004 | Отправлено: 09:10 29-08-2006
VadimLou



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
TcxTextEdit & Punto Switcher
  Заюзал TcxTextEdit в режиме  
    cxEdit.Properties.EchoMode:= eemPassword;
Punto Switcher перехватывает ввод и переводит на кирилик...  
Как бы побороть это (в наследнике TcxTextEdit).

Всего записей: 707 | Зарегистр. 22-07-2004 | Отправлено: 13:00 29-08-2006
jicoff

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
uranic2
 
В случае sequence может получиться большое количество дырок, просто потому что пользователь может всегда отказаться от вставки новой записи - взял и передумал. Возможно это не так уж и плохо, но все зависит от ситуации. А как быть с MSSQL? Работа с guid не всегда удобна.
 
Похоже ты не внимательно читал сообщение hobest. Прибавление константы нужно только на момент вставки записи, пока еще не вызван Post. Это значение не предполагается отсылать на сервер, зато не будет лишнего обращения к БД. Особенно это касается auto increment полей, хотя бы того же MSSQL, для которых не предполагается резервирования значения, как это делает sequence. Думаю такой подход интересный и им вполне можно пользоваться.

Всего записей: 289 | Зарегистр. 03-03-2006 | Отправлено: 13:19 29-08-2006
uranic2

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

Цитата:
А как быть с MSSQL? Работа с guid не всегда удобна.  

 
Ох, с MSSQL я завязал 3 года назад,  тут уж серьезно посоветовать не смогу. Для MSSQL
можно было писать процедуру и select @@identy - кажется так.  

Цитата:
Похоже ты не внимательно читал сообщение hobest. Прибавление константы нужно только на момент вставки записи

Каюсь, красаты идеи понял не сразу.
 
 

Всего записей: 298 | Зарегистр. 17-08-2004 | Отправлено: 13:39 29-08-2006
VadimLou



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

Цитата:
TcxTextEdit & Punto Switcher

 
Пока поборол так:
  Отрезал на время ввода пароля виндовые события WMGetText, WMSetText, WMCopy, WMCut.
 
Подробнее...
 
Добавлено:
hobest

Цитата:
mssql sequence

Можно sequence эмулировать через таблицу
  tbl_sequence
     seq_table varchar(60),
     seq_value number(15)
Недостаток - нужен отдельный коннект для получения ключа.
 
Второй вариант - после коннекта получить диапазон генерации ключа (min, max). Недостаток - нужно менеджерить диапазоны ...
 
Третий вариант - генерация ключа на клиенте с использованиет уникального среза (IDLevel) выданного сервером БД.  
 
При логоне приложение запрашивает свой уникальный срез:
 
procedure ...AfterConnected(
begin
  IDLevel :=  ... // запросить уникальный срез
end;
 
Ключи генерим например по следующему алгоритму:
 
var  
  IDLevel: integer = 0; // счётчик на сервере БД (например дескриптор текущей сессии или ключ в привязке к пользователю)
  LocalId: integer = 0; // локальный счётчик
 
function GetNowKey(): string;
begin
  inc(local_id);
  Result := FormatDateTime('yymmdd', Now) + IntToStr(IDLevel) + IntToStr(LocalId);
end;  
 
Если IDLevel привязать к пользователю ,тогда нужно рассмотреть вариант одновременной работы нескольких приложений.
 
Дата время в ключе дадут возможность фильтровать по времени вставки.
 
Недостаток - длина ключа. 4 + 9 + 9 = 22 символа, т.е. number(22) == TBCD.

Всего записей: 707 | Зарегистр. 22-07-2004 | Отправлено: 13:57 29-08-2006
jicoff

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
VadimLou
 
Думаю, что все эти решения "тяжеловесные", так и компонент TcxDBTreeList не захочешь использовать. Впрочем каждый решает для себя сам.

Всего записей: 289 | Зарегистр. 03-03-2006 | Отправлено: 14:57 29-08-2006
Daeron

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

Цитата:
В событии OnNewRecord - если есть такое в твоей СУБД.

В оракле кажись нету. А постить в БД - некошерно, другой юзверь увидит, держать открытой транзакцию - зло.
 
 

Всего записей: 76 | Зарегистр. 10-06-2005 | Отправлено: 15:02 29-08-2006
gvp65

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Daeron
[q][/q]
 
<TcxCustomDBTreeList.OnInitInsertingRecord>
Occurs before a node is inserted into the TreeList control.
 
type
  TcxDBTreeListInitInsertingRecordEvent = procedure(Sender: TObject; AFocusedNode: TcxTreeListDataNode; var AHandled: Boolean) of object;
property OnInitInsertingRecord: TcxDBTreeListInitInsertingRecordEvent;
 
Description
 
The OnInitInsertingRecord event is fired before the end user inserts a node into the TreeList control.  The AFocusedNode parameter identifies the inserted node.  The AHandled parameter specifies whether the default handling is required.  Set it to True to prevent the default handling.
Handle this event to calculate the ParentField value for the inserted record (since it is not implemented automatically).

Всего записей: 1 | Зарегистр. 29-08-2006 | Отправлено: 15:20 29-08-2006
golkanavt



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Сталкивался ли кто с задачей блокировки дочерних записей в Detail View в зависимости от условия по данным в Master View? Блокировка нужна только для дочерних записей определенного родителя а не для всех "дочек".

Всего записей: 1069 | Зарегистр. 08-04-2002 | Отправлено: 15:31 29-08-2006
jicoff

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

Цитата:
... блокировки дочерних записей ...  

 
А это что за "зверь" такой? В GridView есть такое понятие?

Всего записей: 289 | Зарегистр. 03-03-2006 | Отправлено: 16:09 29-08-2006
   

Страницы: 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

Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Использование DevExpress
ShIvADeSt (29-01-2007 03:17): идем сюда
http://forum.ru-board.com/topic.cgi?forum=33&topic=7918


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

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

LiteCoin: LgY72v35StJhV2xbt8CpxbQ9gFY6jwZ67r

Рейтинг.ru