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

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в 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
vladman

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

Цитата:
Да вы меня правильно поняли именно это интересует.  


Код:
procedure <YourForm>.<YourcxGridPopupMenu>Popup(ASenderMenu: TComponent; AHitTest: TcxCustomGridHitTest; X, Y: Integer; var  
    AllowPopup: Boolean);  
begin  
  AllowPopup := (AHitTest is TcxGridColumnHeaderHitTest ) and  
      (TcxGridDBColumn(TcxGridColumnHeaderHitTest(AHitTest).Column).DataBinding.FieldName = '<YourColumnName>');  
  AllowPopup := ((AHitTest is TcxGridRecordCellHitTest) and
      (TcxGridDBColumn(TcxGridRecordCellHitTest(AHitTest).Item).DataBinding.FieldName = '<YourColumnName>')) or AllowPopup;
end;  

И не забудьте установить AlwaysFireOnPopup = True.
 
Добавлено:
SIgor33

Цитата:
А по поводу второго вопроса.... Хотелось бы поменять картинку и увидить hint  

Эта статья, думаю, направит в нужном направлении.

Всего записей: 708 | Зарегистр. 13-11-2002 | Отправлено: 12:44 02-10-2009
ZalivkoDenis



Full Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
FunCode
В данном сучае, похоже, как вариант устроит. Но, необходима оговорка:

Цитата:
а если просто надо узнать какой View

Можно узнать View только верхнего уровня, а вот для detail этот самый вью создаётся как clone и я пока не нашёл как определить, что это  клон от вью, созданного в дезайн-тайме второго уровня... Вообщем, как-то так... Пошёл от противного, если вью не первого уровня (нулевого), что вполне нормально определяется как AFocusedView=tv_Main, значит это детальный вью...
Хотелось бы узнать как ПРАВИЛЬНО обработать ситуацию, описанную мной несколькими постами выше, потому как это решение тянет, прям скажем, на выкручивание...
Спасибо.  

Всего записей: 537 | Зарегистр. 06-10-2005 | Отправлено: 12:59 02-10-2009
vladman

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

Цитата:
Как и у многих других, у меня ступор.  
Есть cxGrid, есть два cxGridDBTableView оформленные как master-detai....
Необходимо, чтобы cxButton.Enable := False, если выбрана запись MasterDataset и, соотвественно cxButton := True, при выбранной записи DetailDataset...

Обрабатываем событие OnFocusedViewChanged вашего cxGrid, что-то вроде этого

Код:
procedure <YourForm>.<YourcxGrid>FocusedViewChanged(Sender: TcxCustomGrid; APrevFocusedView, AFocusedView:
    TcxCustomGridView);
begin
  <YourButton>.Enabled := not (AFocusedView = <YourcxGridDBTableViewMaster>)
end;

 
Добавлено:
ZalivkoDenis

Цитата:
Можно узнать View только верхнего уровня, а вот для detail этот самый вью создаётся как clone и я пока не нашёл как определить, что это  клон от вью, созданного в дезайн-тайме второго уровня

Тоже не проблема. Тот же код, но с проверкой не мастрвью, а дитейл:
procedure <YourForm>.<YourcxGrid>FocusedViewChanged(Sender: TcxCustomGrid; APrevFocusedView, AFocusedView:
    TcxCustomGridView);
begin
  <YourButton>.Enabled := AFocusedView.PatternGridView = <YourcxGridDBTableViewDetail>
end;  
 
Добавлено:
SIgor33

Цитата:
Вопрос хотелось бы для колонки в которой находиться Blob сделать так чтобы если он пуст то вне ячейке текст НЕТ Данных  

Точно так же как и с полем integer, только  
  if VarIsNull(ARecord.Values[Sender.Index]) then AText := 'NULL' и установите свойство Properties.BlobPaintStyle = bpsDefault

Всего записей: 708 | Зарегистр. 13-11-2002 | Отправлено: 13:14 02-10-2009
ZalivkoDenis



Full Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
vladman
Вы просто гений (а может разработчик , а может и то и другое )!!! В который раз убеждаюсь! СПАСИБО!!! Pattern(!) -- это всё из-за моего плохого английского В хелпе это есть! СПАСИБО!!!

Всего записей: 537 | Зарегистр. 06-10-2005 | Отправлено: 13:30 02-10-2009
vladman

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

Цитата:
СПАСИБО!!!

Не за что, рад что помог. А по-поводу английского - это да, в нашем деле он строить и жить помогает!

Всего записей: 708 | Зарегистр. 13-11-2002 | Отправлено: 13:41 02-10-2009
SIgor33

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
vladman
Примного багодарен Ваши советы помогли

Всего записей: 652 | Зарегистр. 03-03-2009 | Отправлено: 14:13 02-10-2009
ZalivkoDenis



Full Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Доброго времени суток!
Не совсем критичный момент, но, тем не менее, есть вопросик.
(Может быть сразу непосредственно к vladman - самые квалифицированные ответы в топе!)
Использую ImageComboBoxProperties для TcxGridDBColumn. Данные отображаются сейчас так: Image - left justify, Caption (text) - right justify. А хотелось бы, чтобы и Image и Text были как бы "слеплены", имели одно justify. Чтобы реализовать такое отображение обязательно определять событие OnCustomDrawCell или есть какие-нибудь другие способы?
Спасибо.

Всего записей: 537 | Зарегистр. 06-10-2005 | Отправлено: 05:18 03-10-2009
vladman

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

Цитата:
хотелось бы, чтобы и Image и Text были как бы "слеплены", имели одно justify

Все просто. Скорее всего <YourImageComboBoxColumn> имеет тип integer, а поля с типом integer, по умолчанию, выравнивается вправо. Измените свойство <YourImageComboBoxColumn>.Properties.Alignment.Horz в значение taLeftJustify и все "слепится", и даже без обработки события  OnCustomDrawCell

Всего записей: 708 | Зарегистр. 13-11-2002 | Отправлено: 12:56 03-10-2009
ZalivkoDenis



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

Цитата:
Измените свойство <YourImageComboBoxColumn>.Properties.Alignment.Horz в значение taLeftJustify

Весь парадокс заключается в том, что именно так и было установлено, потому я и не смотрел в этом направлении. Но(!) после того, как я ВЫБРАЛ опять же taLeftJustify (т.е. как бы ничего и не изменилось), это свойство начало отображаться в IDE не как значение по-умолчанию (в моей настройке -- шрифт отображения значения меняется на bold) и действительно "слепилось"... Но, вот интересно, это глюк IDE или в Dev что-то не то. Но, главное, что я (а со мной и многие форумчане) понял в чём "фишка". Спасибо!

Всего записей: 537 | Зарегистр. 06-10-2005 | Отправлено: 15:02 03-10-2009
vladman

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

Цитата:
после того, как я ВЫБРАЛ опять же taLeftJustify (т.е. как бы ничего и не изменилось), это свойство начало отображаться в IDE не как значение по-умолчанию (в моей настройке -- шрифт отображения значения меняется на bold) и действительно "слепилось"...

Да, есть такая особенность у Properties.Alignment. Чей конкретно это bug - не знаю, не разбирался. Об этом просто нужно помнить , как говорится bug сойдет за feature.

Всего записей: 708 | Зарегистр. 13-11-2002 | Отправлено: 16:48 03-10-2009
Chukotka

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

Код:
 
var
  Gr: TcxGrid;
  Tr: TcxTreeList;
begin
  Gr.ScrollContent(dirUp); // НЕ работает
  Tr.ScrollContent(dirUp); // работает
end;
 

Кто может объяснить - почему cxGrid не выполняет команду скроллинга?

Всего записей: 428 | Зарегистр. 01-11-2006 | Отправлено: 07:04 05-10-2009
f3ka

Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Chukotka
думаю что проблема в том что данные привязаны к TableView а не к Grid'y.
предлагаю так

Код:
<YourTcxCustomGridView>.Controller.Scroll(sbVertical, scLineDown, ScrollBy);

ScrollBy - переменная типа Integer

Всего записей: 497 | Зарегистр. 02-03-2007 | Отправлено: 08:57 05-10-2009
X11



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Господа, опять возвращаюсь к AppendRecord, если вы не против.
Проблема в том, что записи в базу физически не попадают.
Связка Fib 6.9.6, cxGrid x43, Firebird 2, D2007.
 
У FibDataSet установлено свойство AutoCommit в True.
 

Код:
 
       with dbgIdSpr.dataController do
        begin
          beginupdate;
          dbgSyncSPR.datacontroller.beginupdate;
          Screen.Cursor := crHourGlass;
          try
             ForEachRow(false, FillFromSpr);
 
          finally
            endupdate;
            dbgSyncSPR.datacontroller.endupdate;
            Screen.Cursor := crDefault;
            dxStatusBar1.Panels[1].Text := 'ОК';
            Application.ProcessMessages;
          end;//try
        end;//with
 
 
procedure TfmMlsOptions.FillFromSpr(ARowIndex: Integer; ARowInfo: TcxRowInfo);
Var
 RecIndex: integer;
 
begin
  with dbgIdSpr.DataController do
    begin
       if ARowInfo.Level = Groups.GroupingItemCount then
         begin
 
          with tSprs do
              try
                SQLs.SelectSQL.Text := 'select id, name from ' + Values[ARowInfo.RecordIndex, dbgIdSprNAME.Index];
                Open;
 
                First;
                while not Eof do
                  begin
                    dbgSyncSpr.DataController.AppendRecord;
                    RecIndex := dbgSyncSpr.DataController.RecordCount - 1;
 
                    dbgSyncSpr.DataController.Values[RecIndex, dbgSyncSprID_SPR.Index]        := Values[ARowInfo.RecordIndex, dbgIdSprID.Index];
                    dbgSyncSpr.DataController.Values[RecIndex, dbgSyncSprID_IN_KVX.Index]     := FBN('ID').AsInteger;
                    dbgSyncSpr.DataController.Values[RecIndex, dbgSyncSprVALUE_IN_KVX.Index]  := FBN('name').AsString;
 
                    dxStatusBar1.panels[0].Text := FBN('name').AsString;
                    Application.ProcessMessages;
                    next;
                  end;//while
              finally
                Close;
              end;//try-finally
         end;//if
    end;//with
end;
 

 
После цикла вижу записи в гриде. Закрыл/открыл окно. Записей нет.
Если добавляю записи ручками (редактирую руками ячейки), то данные сохраняются.
На что мне ещё обратить внимание? Что я забыл?

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

Всего записей: 3253 | Зарегистр. 24-11-2005 | Отправлено: 11:32 05-10-2009
volser

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
X11
Данные нужно менять в датасете, а не в гриде.

Всего записей: 713 | Зарегистр. 31-03-2006 | Отправлено: 11:39 05-10-2009
f3ka

Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
X11
что то мне подсказывает что надо вызывать у DataController'a метод Post... возможно с параметром True...
З.Ы. а лучше данные в датасет пихать

Всего записей: 497 | Зарегистр. 02-03-2007 | Отправлено: 11:40 05-10-2009 | Исправлено: f3ka, 11:40 05-10-2009
X11



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
volser, я знаю, но хочу добавлять именно с помощью грида. Я уже писал об этом на 80-81 стр.
 
Добавлено:
f3ka, добавил dbgSyncSpr.DataController.post; проблема не исчезла.

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

Всего записей: 3253 | Зарегистр. 24-11-2005 | Отправлено: 11:45 05-10-2009
Cryogen2003



Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Добрый день всем. Хоть это недавно обсуждалось, но у меня есть некоторые глюки, с которыми не могу разобраться. Проблем с раскраской в гриде.
Код:

Код:
 
Procedure TfrmSelAgree.dbgAgreementsDBTableView1CustomDrawCell
  (Sender: TcxCustomGridTableView; ACanvas: TcxCanvas;
  AViewInfo: TcxGridTableDataCellViewInfo; Var ADone: Boolean);
Begin
  If AViewInfo.GridRecord.Focused Then
    ACanvas.Brush.Color := clHighlight
  Else
    If AViewInfo.Focused Then
      ACanvas.Brush.Color := clHighlight
    Else
      If VarToInt(odsAgreements.FieldValues['agreetype']) = 1 Then
        ACanvas.Brush.Color := clInfoBk
      Else
        ACanvas.Brush.Color := clWhite;
End;
 

Проблема в следующем, после открытия формы все cell желтого цвета, после того, как пробежишься по всей табличке, показывает ровно то, что надо. Стало быть, как исправить этот глюк?

----------
Холодильники мы

Всего записей: 745 | Зарегистр. 08-12-2004 | Отправлено: 11:59 05-10-2009
vladman

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

Цитата:
На что мне ещё обратить внимание? Что я забыл?


Цитата:
но хочу добавлять именно с помощью грида

В хелпе же написано, что в случае если данные для датаконтроллера поддаются с датасета -  нужно использовать вместо AppendRecord метод Append. А метод Append нельзя вызывать в внутри BeginUpdate/EndUpdate и BeginFullUpdate/EndFullUpdate блоков.
Попробуйте убрать BeginUpdate/EndUpdate.

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



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

Цитата:
В хелпе же написано, что в случае если данные для датаконтроллера поддаются с датасета -  нужно использовать вместо AppendRecord метод Append.  

In provider and unbound modes, you can use the AppendRecord method to add a new record. AppendRecord retrieves the record index that can be used to access its field values via the Values property. The record added by AppendRecord does not require posting. Also such a record cannot be discarded by calling the Cancel method.
 
The record added by AppendRecord does not require posting
 
Получается, что post не нужно вызывать
 
ms-help://borland.bds5/ExpressDataController.BDS5/ExpressDataController/IDH_TcxCustomDataController_Append.htm
 


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

Всего записей: 3253 | Зарегистр. 24-11-2005 | Отправлено: 12:09 05-10-2009 | Исправлено: X11, 12:10 05-10-2009
vladman

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

Цитата:
Получается, что post не нужно вызывать

Но у вас же DataController находится и не в provider и не в unbound. У вас  
Bound mode - The DataController is connected to a TDataSet by means of a TDataSource object.
Подробнее: ms-help://borland.bds5/ExpressQuantumGrid6.BDS5/ExpressQuantumGrid6/IDH_cd_Data_Loading_Modes.htm

Всего записей: 708 | Зарегистр. 13-11-2002 | Отправлено: 12:17 05-10-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