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

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

Автор: apnss
Дата сообщения: 08.11.2011 11:08

Цитата:
apnss, версии студии и дев?


во блин тупанул ....

Delphi XE
DevExpress 6.57
Автор: fortezza
Дата сообщения: 08.11.2011 14:45
Добрый день, чтобы получить значения выделенных записей некоторой колонки делаю так:

cxGTV.Controller.SelectedRecords[i].Values[cxGTV.GetColumnByFieldName(Field).Index]

но при группировке массив Values уменьшается,
есть возможность получить нужное мне значение?

Спасибо.
Автор: X11
Дата сообщения: 08.11.2011 15:07

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



Код:

//цикл по выделенным записям
with grid.DataController do
begin
BeginUpdate;
for iCurRow := 0 to GetSelectedCount - 1 do
begin
ARowIndex := GetSelectedRowIndex(iCurRow);
ARowInfo := GetRowInfo(ARowIndex);

if ARowInfo.Level < Groups.GroupingItemCount then
Continue
else
begin

//получаем значение колонки, которая имеет индекс iKeyFieldInd
Id := Values[ARowInfo.RecordIndex, iKeyFieldInd];

//или
Id := Values[ARowInfo.RecordIndex, gridColId.Index];

end;//else
end;// for iCurRow := 0 to GetSelectedCount - 1 do
end;// with

Автор: fortezza
Дата сообщения: 11.11.2011 14:34
спасибо
Автор: indapublic
Дата сообщения: 13.11.2011 15:19
Добрый день.
Имеется грид, необходимо обновить данные и вернуть фокус в то место, где он находился до обновления.

Код:
AFocusedRecordIndex := View.Controller.FocusedRecordIndex;
AFocusedColumnIndex := View.Controller.FocusedColumn.Index;
...
...
...
View.Columns[AFocusedColumnIndex].FocusWithSelection;
View.Controller.FocusRecord(AFocusedRecordIndex, False);

Приводит к фокусированию записи, но перемещается по таблице так, что запись оказывается в самом верху. Приведу пример:

http://dl.dropbox.com/u/3480160/cxgrid.png

Это неудобно и раздражает. Возможно ли избавиться от этого?
Автор: linker_2009
Дата сообщения: 13.11.2011 15:41
View.DataController.BeginFullUpdate;
...
// что то делаете
...
View.DataController.EndFullUpdate;
Автор: indapublic
Дата сообщения: 14.11.2011 00:58
Не, не получается. Дело в том что Dataset полностью перестраивается (сначала очищается, а потом заполняется заново), первая колонка является мерженной (Merge, ее не видно на скрине), фокус уходит на нее
Автор: exteris
Дата сообщения: 14.11.2011 05:43
Запоминайте, а потом возвращайте TopRecordIndex.
Автор: marser
Дата сообщения: 14.11.2011 05:57
indapublic

Цитата:
Имеется грид, необходимо обновить данные и вернуть фокус в то место, где он находился до обновления.
Код:
AFocusedRecordIndex := View.Controller.FocusedRecordIndex;
AFocusedColumnIndex := View.Controller.FocusedColumn.Index;
...
View.Columns[AFocusedColumnIndex].FocusWithSelection;
View.Controller.FocusRecord(AFocusedRecordIndex, False);

Мне кажется, что использовать FocusedRecordIndex не совсем правильно. Где гарантия, что после обновления DataSet, FocusedRecordIndex будет указывать на нужную запись? А если другой пользователь добавил, удалил записи? Лучше запоминать значение ключевого поля и делать DataController.LocateByKey.

Цитата:
Приводит к фокусированию записи, но перемещается по таблице так, что запись оказывается в самом верху

Попробуйте поиграться с Controller.TopRecordIndex
Автор: indapublic
Дата сообщения: 14.11.2011 07:50

Цитата:
Мне кажется, что использовать FocusedRecordIndex не совсем правильно

Честно говоря, это просто один из вариантов. Dataset.Locate тоже один из них - но поведение идентичное.


Цитата:
Запоминайте, а потом возвращайте TopRecordIndex.


Цитата:
Попробуйте поиграться с Controller.TopRecordIndex

О, за это спасибо. Я пропустил это свойство. Попробую и обязательно отпишусь

Добавлено:
Да, это самое то. Спасибо большое обоим
Автор: IronMan182
Дата сообщения: 14.11.2011 15:27
Погибаю

Перешел от DEvok 4.X на 5.6 И только потом заметил что cxGrid раньше грузил список из 60 000 позиций за 10 секунд на CORE 2 DUO , а теперь за 4 минуты . Свойство грида не менял !!!
Автор: sam291074
Дата сообщения: 14.11.2011 18:33
Подскажите, есть ли в cxShellComboBox встроенная возможность фильтрации?
Хочется, чтобы при включенном режиме "Показывать файлы" отображались не все, а только нужного типа.

Или намекните как это можно реализовать. Заранее признателен.
Автор: BlackVetal
Дата сообщения: 15.11.2011 05:09
IronMan182
зачем вы все грузите??? грузите только то что нужно пользователю в данный момент, или если это критично тогда загрузку в отдельный поток выводите.
Я очень редко встречаю ситуацию когда такие огромные списки грузятся, обычно сначала устанавливается фильтр (к примеру по дате) - и по нему делается выборка.
Автор: IronMan182
Дата сообщения: 15.11.2011 05:21

Цитата:
зачем вы все грузите???


Я объяснял это тупым хомякам , делал поиск по первым буквам ... все бесполезно
Автор: IronMan182
Дата сообщения: 15.11.2011 16:58
Кстати ! А если cxGrid тянет все к себе , то можно разрушить рекордсет провайдера DB, Но что бы рекордсет cxGrid непотревожить
Автор: VadimLou
Дата сообщения: 16.11.2011 04:42
Нельзя. cxGrid использует Bookmarks/Locate для синхронизациия с DataSet-ом.
Автор: Cryogen2003
Дата сообщения: 17.11.2011 15:44
Добрый вечер.

есть TcxbandedTableView, есть TcxGridPopupMenu привязанный к этому tableview.

Стало быть, как определить колонку, над котором было вызвано popupmenu?
Сейчас возвращает AV, не пойму где ошибся.

[more=Текущий вариант]
Procedure TfrmMBEmployees.cxGridPopupMenu1PopupMenus0Popup
(ASenderMenu: TComponent; AHitTest: TcxCustomGridHitTest; X, Y: Integer);
Var
FieldName: String;
DBColumn: TcxGridDBBandedColumn;
AColumn: TcxGridColumn;
Begin
miIndicatorHistory.Visible := False;
ShowMessage(ASenderMenu.Name);
If GetHitTypeByHitCode(AHitTest.HitTestCode) = gvhtCell Then
Begin
AColumn := TcxCustomGridColumnHitTest(AHitTest).Column;
DBColumn := TcxGridDBBandedColumn(AColumn);
FieldName := DBColumn.DataBinding.FieldName; //вот тут валиться AV
If (QuickPosText('refcode_hand_', FieldName) > 0) Or
(QuickPosText('refcode_auto_', FieldName) > 0) Then
miIndicatorHistory.Visible := True;
End;
End;
[/more]
Автор: marser
Дата сообщения: 18.11.2011 06:21
Cryogen2003

Цитата:
Сейчас возвращает AV, не пойму где ошибся

Ошибка здесь:

Код: AColumn := TcxCustomGridColumnHitTest(AHitTest).Column;
Автор: Cryogen2003
Дата сообщения: 18.11.2011 07:36
marser
Благодарствую.

Возникла еще проблема маленькая. Есть одна из колонок, у которой Properties = CheckBox. CheckBox показывается нормально, но нужно чтобы в этой колонке был еще вариант ниспадающего списка (ShowEditButtons=True). Опытным путем нашел, что если Properties = Nil, то кнопка ниспадающего списка (я пользую для открытия другой формы) появляется, а если Propeties чему-то равно, то такая вещь не появляется.

Можно ли как-нибудь решить этот вопрос?
Автор: volser
Дата сообщения: 18.11.2011 10:07
Cryogen2003
Сделайте две колонки, одна чекбокс, вторая с кнопкой.
Автор: Cryogen2003
Дата сообщения: 18.11.2011 10:43
volser
ЭЭЭЭ, и что мне в эту вторую колонку кроме кнопки запихнуть?
Автор: marser
Дата сообщения: 18.11.2011 11:29
Cryogen2003

Цитата:
и что мне в эту вторую колонку кроме кнопки запихнуть?

Ничего. Кнопку по ширине колонки: Properties.ViewStyle := vsButtonsOnly
Автор: noobofthenoobs
Дата сообщения: 21.11.2011 09:02
Всем привет. Использовал cxcheckcombobox, но вот теперь понадобилось 3 положения переключателя. Как я понял, свойство states для каждого item'a как раз может быть установлено в 3 положения, а собственно cbsUnchecked, cbschecked и cbsGrayed. Как сделать, чтобы state переключался в каждое из этих трех положений поочередно, а не как стандартно (только checked и unchecked - снять галку и поставить галку).
Автор: Cryogen2003
Дата сообщения: 21.11.2011 09:14
noobofthenoobs
Дык разрешить надо, чтобы был вариант с Grayed - AllowGrayed..... и будет тебе счастья
Автор: noobofthenoobs
Дата сообщения: 21.11.2011 09:28

Цитата:
Дык разрешить надо, чтобы был вариант с Grayed - AllowGrayed

вот это как раз и не работает... Ставлю
cxcheckcombobox1.Properties.AllowGrayed:=true;
и все равно чекает по старому (только 2 положения).
Даже программно не ставит (типа cxcheckcombobox1.States[1]:=cbsGrayed;) - флажок остается в том положении каком и был, если снят то снят, если отмечен то отмечен.
Автор: Cryogen2003
Дата сообщения: 21.11.2011 09:38
noobofthenoobs
пример кода (как pas, так и dfm) в студию плиз
Автор: noobofthenoobs
Дата сообщения: 21.11.2011 09:57
Наипримитивнейший пример:

[more=unit1.pas]
unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, cxGraphics, cxControls, cxLookAndFeels, cxLookAndFeelPainters,
cxContainer, cxEdit, cxTextEdit, cxMaskEdit, cxDropDownEdit, cxCheckComboBox,
StdCtrls;

type
TForm1 = class(TForm)
cxCheckComboBox1: TcxCheckComboBox;
Button1: TButton;
procedure FormCreate(Sender: TObject);
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
cxcheckcombobox1.States[1]:=cbsGrayed;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
cxcheckcombobox1.Properties.AllowGrayed:=true;
end;

end.

[/more]

[more=dfm]
object Form1: TForm1
Left = 0
Top = 0
Caption = 'Form1'
ClientHeight = 213
ClientWidth = 339
Color = clBtnFace
Font.Charset = DEFAULT_CHARSET
Font.Color = clWindowText
Font.Height = -11
Font.Name = 'Tahoma'
Font.Style = []
OldCreateOrder = False
OnCreate = FormCreate
PixelsPerInch = 96
TextHeight = 13
object cxCheckComboBox1: TcxCheckComboBox
Left = 104
Top = 56
Properties.Items = <
item
Description = 'Item1'
end
item
Description = 'Item2'
end
item
Description = 'Item3'
end>
TabOrder = 0
Width = 121
end
object Button1: TButton
Left = 120
Top = 96
Width = 75
Height = 25
Caption = 'Button1'
TabOrder = 1
OnClick = Button1Click
end
end
[/more]
Автор: Cryogen2003
Дата сообщения: 21.11.2011 10:09
noobofthenoobs
А если попробовать запихнуть в EditValue = Null и не пользоваться States? Плюс ко всему, создал такой код - все работает как надо.
Дельфя у меня 2007 со всеми патчами.

Добавлено:
кстати, не помешало бы скрыть код с помощью more, читать страницу не реально.
Автор: noobofthenoobs
Дата сообщения: 21.11.2011 10:54
Cryogen2003
Даже не знаю... у меня вот не работает. На нажатие кнопки вообще никакой реакции, ну и вручную кликая только 2 положения чекает( Может дело в том что Delphi 2010 у меня?...
Автор: marser
Дата сообщения: 21.11.2011 12:31
noobofthenoobs
Использование cbsGrayed - это нестандартный режим. Нужно обрабатывать события OnEditValueToStates и OnStatesToEditValue. А у Cryogen2003 особенная Delphi и DevExpress.

Страницы: 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211

Предыдущая тема: Помогите пожалуйста с блокировкой клавиатуры и мышки


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