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

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

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

ShIvADeSt (07-02-2009 14:53): Продолжаем тут
http://forum.ru-board.com/topic.cgi?forum=33&topic=10123#1
 Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 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 122

   

ShIvADeSt



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

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




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

Всего записей: 3956 | Зарегистр. 29-07-2003 | Отправлено: 03:16 29-01-2007 | Исправлено: VitaliM, 15:47 24-11-2008
Xaoc666

Newbie
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Alkatraz
 
Ну... это как-то некрасиво. Если бы исправдения касались одной-двух функций, это нормально, но если придется вставлять try...except или проверки на nil в десятках методов разных классов... Мало того, что можно пропустить пару-тройку таких методов, и словить глюк потом, уже в работающем приложении, так еще при обновлении ДевЭкспресса придется эту операцию повторять заново (если конечно, разработчики ее не подлечат).
 
П.С. Может кто-нибудь с легальной копией мог бы отписать на кноуледжбэйз уточнения данной ошибки, описанные в моем предидущем сообщении, чтобы разработчики ее сами исправили? Был бы ему очень благодарен.

Всего записей: 31 | Зарегистр. 13-12-2006 | Отправлено: 12:00 17-03-2007
Xaoc666

Newbie
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Вроде бы удалось победить ошибку с добавлением новой строки в детали и повторным нажатием кнопки "вниз". Мой вопрос снимается.
 

Код:
 
cxGridTableView.pas
 
procedure TcxGridTableController.DoKeyDown(var Key: Word; Shift: TShiftState);
var
  AFocusedColumn: TcxGridColumn;
{+}
  AGridViewLink: TcxGridListenerLink;
{+.}
begin
  AFocusedColumn := FocusedColumn;
{+}
  AGridViewLink := GridView.AddListenerLink;
  try
{+.}
  inherited;
{+}
  if AGridViewLink.GridView <> nil then
{+.}
  if CanProcessCellMultiSelect(AFocusedColumn) then
    CellMultiSelectKeyDown(Key, Shift);
{+}
  finally
    AGridViewLink.Free();
  end;
{+.}
end;
 
procedure TcxGridTableController.KeyDown(var Key: Word; Shift: TShiftState);
 
//var ft,lt:integer;
 
var
  AFocusedRowIndex: Integer;
{+}
  AGridViewLink: TcxGridListenerLink;
{+.}
begin
 
  ...
 
    VK_DOWN:
{
    begin
      ft:=gettickcount;
}
      if not DefocusSpecialRow then
      begin
{+}
        AGridViewLink := GridView.AddListenerLink;
        try
{+.}
        FocusNextRecord(FocusedRowIndex, True, False, not (ssShift in Shift), not (ssShift in Shift));
{+}
        if AGridViewLink.GridView <> nil then
{+.}
        if not MultiSelect then Site.Update;
{+}
        finally
          AGridViewLink.Free();
        end;
{+.}
      end;
{
      lt:=gettickcount;
      application.mainform.Caption := inttostr(lt-ft);
    end;
}
  ...
 

Всего записей: 31 | Зарегистр. 13-12-2006 | Отправлено: 00:45 18-03-2007
Dronton2

Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
В мартовской версии, взятой из ссылки в шапке, в компоненте TcxDBTreeList глюк: при добавлении новой строки (например, посредством нажатия кнопки Insert) выдаётся сообщение: "RecordIndex вышел за границы диапазона".
Это только у меня такое творится?
Откатился на февральскую версию.

Всего записей: 460 | Зарегистр. 27-06-2005 | Отправлено: 11:14 20-03-2007
DragFaq

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Поздскажите хоть кто-то, пожалуйста. Нужно пройтись по выделенным записям в cxGrid (мультиселект). Чёто все перерыл, не нашел официальной версии.
РАньше делал так:
 
  with cxGridProdDBTableView1.DataController.DataSet do
  begin
    First;
    try
      dmbase.IsAppl := True;
      while not EOF do
      begin
        if cxGridProdDBTableView1.Controller.FocusedRecord.Selected = True then
        begin
          ...
        end;
        Next;
      end;
    finally
      dmbase.IsAppl := False;
    end;
  end;
 
Но у заказчика уже вылез глюк, когда он воспользовался фильтром, а потом выполнил эту функцию... Аксес виолейшн.

Всего записей: 2 | Зарегистр. 20-03-2007 | Отправлено: 18:24 20-03-2007
jicoff

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
DragFaq
 
Что сильно сомневаюсь, что такая конструкция вообще может правильно работать. Несмотря на автосинхронизацию, если таковая установлена, эта самая синхронизация будет выполняться после того, как грид обратно получит управление, т.е. фактически в idle режиме.
 
Тебе надо не по датасету "бродить", а по GridView->Controller->SelectedRecords[RowIndex],
при условии что RowIndex меньше GridView->Controller->SelectedRecordCount.

Всего записей: 289 | Зарегистр. 03-03-2006 | Отправлено: 19:44 20-03-2007
VoodooSV

Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
DragFaq
Почитай в хэлпе по QuantumGrid раздел "Task based help", а именно "Implementing Drag-And-Drop Functionality"
 
В результате будет что-то типа:
 

Код:
 
    if View.OptionsSelection.MultiSelect then
      for I := 0 to View.Controller.SelectedRecordCount - 1 do
         //обработка View.Controller.SelectedRecords[I]
 

Всего записей: 456 | Зарегистр. 04-02-2005 | Отправлено: 09:21 21-03-2007 | Исправлено: VoodooSV, 09:21 21-03-2007
DragFaq

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Спасибо за ответы, но до этого тоже я додумывался. Вся сложность в том, что мне надо при проходе менять значения в некоторых полях этих выделенных строк. Потому я и работал через датасет. а вот в случае GridView->Controller->SelectedRecords[RowIndex], я могу сним работать только ридонли.

Всего записей: 2 | Зарегистр. 20-03-2007 | Отправлено: 14:42 21-03-2007
shulum



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
TcxBlobEdit
вопрос - как извлечь информацию из него? т.е. например вставлена картинка через интерфейс, а необходимо получить ее в виде потока, либо как Tbitmap, но именно из самого компонента.
 
Документацию читал - не нашел. Если есть возможность - помогите пожалуйста!
 
Заранее спасибо.  
 
С уважением!

Всего записей: 121 | Зарегистр. 11-06-2006 | Отправлено: 18:18 21-03-2007
Glukodel



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
есть вопрос - как в TcxLookupComboBox при показе 2-х (и более колонок) из TdxMemData после выбора значения из списка заставить компонент показывать значения из всех колонок, если показываемое поле задается через интовое ListFieldIndex?
буду признателен за варианты - 2-й день ничё толкового не могу придумать....
 
P.S. вообще-то у меня наследник от TcxLookupComboBox - т.е. очень интересно, чего ему можно переопределить для достижения цели...

Всего записей: 97 | Зарегистр. 16-08-2004 | Отправлено: 20:54 21-03-2007 | Исправлено: Glukodel, 21:40 21-03-2007
waik



Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Раз уж вопрос про TdxMemData прозвучал: он вообще умеет сортировать по нескольким полям? Никогда не надо было, а тут ткнулся- а не сортирует. По одному легко, а по двум трём?
 
Glukodel
 По моему в таком случае (если через ListFieldIndex) то не получится. А что мешает зная FieldIndex заполнить ListFieldNames через точку с запятой? Или добавить в ListColumns несколько полей?

Всего записей: 605 | Зарегистр. 15-01-2003 | Отправлено: 11:48 22-03-2007 | Исправлено: waik, 11:51 22-03-2007
Dronton2

Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
DragFaq
В хелпе есть пример:

Код:
var
  I: Integer;
  ARowIndex: Integer;
  ARowInfo: TcxRowInfo;
begin
  with tvOrders.DataController do
  begin
    BeginUpdate;
    try
      for I := 0 to GetSelectedCount - 1 do
      begin
        ARowIndex := GetSelectedRowIndex(I);
        ARowInfo := GetRowInfo(ARowIndex);
        //Test whether a row is a grouping row
        if ARowInfo.Level < Groups.GroupingItemCount then
          Continue
        else
          //unbound or provider mode
          Values[ARowInfo.RecordIndex, tvOrdersSaleDate.Index] := Now();
      end;
    finally
      EndUpdate;
    end;
  end;
end;
 

 
Добавлено:
Glukodel
Как я понял, нужно, чтобы несколько полей показывались в строке редактора, при закрытом выпадающем списке?
Может быть, поможет такое:
- в dataset, из которого формируется выпадающий список, добавить текстовое поле, которое формируется перечислением значений всех полей, разделённые запятыми.
- в свойстве ListColumns задать для этого поля ширину 0
- в свойстве ListFieldIndex указать индекс этого поля

Всего записей: 460 | Зарегистр. 27-06-2005 | Отправлено: 11:53 22-03-2007
Glukodel



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Dronton2
waik
вариант со скрытой колонкой, показывающий на поле, где формируется полная строка у меня реализован сейчас, но это удвоение занимаемой памяти... по требованию заказчика это всё должно работать при скажем 50тыс. строк... т.е. интересен вариант переопределения отрисовки (пока не вышло) или еще какой...  
и еще не смог переопределить метод, дёргающий Properties.OnChange  
кто-нибудь добирался до него?

Всего записей: 97 | Зарегистр. 16-08-2004 | Отправлено: 15:42 22-03-2007
Dennica



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Glukodel
А если сверху положить cxTextEdit оставив незакрытой кнопку вызова списка? Во времена программирования на фокспро частенько так выкручивались хехе

Всего записей: 235 | Зарегистр. 19-12-2005 | Отправлено: 18:32 22-03-2007
jicoff

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Glukodel
 
Странно что заказчик не потребовал работу в миллион строк при увеличении скорости работы. Ну да ладно...
 
Что касается Properties.OnChange попробуй создать свой наследник от того Properties, который требуется твоему компоненту и переопредели: class function GetPropertiesClass: TcxCustomEditPropertiesClass; virtual;

Всего записей: 289 | Зарегистр. 03-03-2006 | Отправлено: 12:01 23-03-2007 | Исправлено: jicoff, 12:02 23-03-2007
demonkot

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
cxGridBandedView
Кто подскажет как в cxGridBandedView впихнуть быстро большое кол-во записей?
Кроме как
 
GBD2.DataController.BeginUpdate;
 for i:=0 to j do begin  
  with GBD1.DataController do begin
   Values[i,0]:=varDataRows_4[0,i];
  end;
 end;
GBD2.DataController.EndUpdate;

Всего записей: 2 | Зарегистр. 22-03-2007 | Отправлено: 12:57 23-03-2007
jicoff

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
demonkot
 
Не совсем понятно, зачем тебе впихивать большое количество данных в GridView, если у тебя уже есть они в каком-то виде. Используй TcxCustomDataSource, пример есть в демках, и ничего никуда не придется впихивать.

Всего записей: 289 | Зарегистр. 03-03-2006 | Отправлено: 14:45 23-03-2007
Glukodel



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Dennica
эээ... спасибо, конечно, за совет, но у меня всё еще не настолько плохо
jicoff
у TcxLookupComboBox есть DoOnChange, который как мне показалось должен дергать Properties.OnChange ... но не дергает
короче должен быть такой метод у TcxLookupComboBox... его и ищу

Всего записей: 97 | Зарегистр. 16-08-2004 | Отправлено: 17:54 23-03-2007
Alkatraz

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Здравствуйте люди! Вот всплыла проблемма при заполнении значений Unbound колонок в DBView.
 
На обработчик непривязанного поля (тип выставлен, но имя поля не задано) OnGetDataText вешаю расчет значения и делаю DataController.SetValue(ARecordIndex, Sender.Index, Value). Все проходит нормально, но при завершении заполнения всех строк выдается Access Violation, при чем где то на уровне самого компонента cxGrid, ибо Try..Except'ом не ловится.
 
Я знаю, что можно сделать и через Calculated Field, но все-таки интересно, где косяк - делаю по примеру с CheckBox'ами, расписанными в Knowledge Base, значения задаются нормально, но вываливается ошибка уже после завершения заполнения значений. Ясно, что намутил где-то с самим гридом/вью, но где не пойму.
 
Если кто работал с Unbound колонками или встречал подобную ситуацию, пожалуйста помогите с решением. Пока сделал через вычисляемое поле, но интересно, как это же реализовать через грид. Буду очень признателен...
 
Добавлено:
Glukodel
Делай Unbound колонку, задавай AText в OnGetDataText и используй ExtLookUpComboBox, в котором будешь выводить требуемые колонки при выпадении списка и нужную вычисляемой колонки при закрытии. Я так у себя вывернулся. Работает на порядок быстрее, чтом вычисляемое поле. Только не понял на счет памяти...

Всего записей: 57 | Зарегистр. 18-09-2006 | Отправлено: 00:17 27-03-2007
George_Lucky



Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
1) Как быстро очистить cxGridTableView от заполненных данных
2) Как привязать cxGridTableView  к cxExtLookupComboBox, который находится  отдельно на другой панели

Всего записей: 413 | Зарегистр. 12-09-2002 | Отправлено: 07:36 27-03-2007
Daeron

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

Цитата:
"RecordIndex вышел за границы диапазона".

Есть такое. Что делать - непонятно

Всего записей: 76 | Зарегистр. 10-06-2005 | Отправлено: 10:28 27-03-2007
   

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

Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Использование DevExpress 2
ShIvADeSt (07-02-2009 14:53): Продолжаем тут
http://forum.ru-board.com/topic.cgi?forum=33&topic=10123#1


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

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

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru