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

» Использование DevExpress 2

Автор: mavrtuva
Дата сообщения: 14.03.2007 09:20
Доброго времени суток! Помогите не специалисту в программировании.
Необходимо срочно решить следующую проблему.
При работе с бэнд таблицей нужно изменить высоту строк когда столбцы расположены не в одну строку
(свойство DataRowHight работает только когда столбцы расположены в одну строку) может кто подскажет как это можно сделать.
свойство LineCount работает но при этом изменяется высота и заголовка, что портит вид Grida, нужно изменить только высоту записи не трогая заголовок. Как я понимаю необходимо обработать onGetCellHight, но как, может кто поможет.
Автор: VadimLou
Дата сообщения: 15.03.2007 04:16
cxGridDBTableView.OnGetCellHeight := DoGetCellHeight;

procedure ?.DoGetCellHeight(Sender: TcxCustomGridTableView;
ARecord: TcxCustomGridRecord; AItem: TcxCustomGridTableItem;
ACellViewInfo: TcxGridTableDataCellViewInfo; var AHeight: Integer);
begin
AHeight := ...;
end;
Автор: Oweb
Дата сообщения: 15.03.2007 07:27
Подскажите, как сделать, чтобы в ячейке ExpressQuantumGrid-а можно было выводить данные в формате текст:иконка:текст?
Автор: Dennica
Дата сообщения: 15.03.2007 08:12
Oweb
Можно написать свой обработчик OnCustomDrawCell
Вот, выдернул один из обработчиков как есть, который рисует просто картинку.

Код: procedure TfrmEquipment.dbbtvEquipmenticoCustomDrawCell(
Sender: TcxCustomGridTableView; ACanvas: TcxCanvas;
AViewInfo: TcxGridTableDataCellViewInfo; var ADone: Boolean);
var
ARec: TRect;
val: integer;
xr, yr: integer;
begin
if AViewInfo.GridRecord.DisplayTexts[AViewInfo.Item.Index] = '' then
Exit;
ARec := AViewInfo.Bounds;
xr := (AViewInfo.Width - 16) div 2;
yr := (AViewInfo.Height - 16) div 2;
val := VarToInt(AViewInfo.GridRecord.DisplayTexts[AViewInfo.Item.Index], -1);
ACanvas.FillRect(ARec);
ACanvas.DrawImage(dmDataAG.iEquipment, ARec.TopLeft.X + xr, ARec.TopLeft.Y + yr, val);
ADone := True;
end;
Автор: Oweb
Дата сообщения: 15.03.2007 10:16
Dennica, спасибо за подсказку.
Еще вопрос: можно как-нибудь сделать, чтобы в гриде отображались DBChart и DBTable все вместе? DBChart вверху, а таблица сразу под ним.
Автор: jicoff
Дата сообщения: 15.03.2007 13:03
Oweb

А что тебе мешает 2 грида поставить один над другим?
Автор: Oweb
Дата сообщения: 15.03.2007 13:33

Цитата:
А что тебе мешает 2 грида поставить один над другим?

Хочется с помошью ExportGridToHTML сохранить график и таблицу в одном файле. Здесь есть простое решение?

Автор: VoodooSV
Дата сообщения: 15.03.2007 15:26
Столкнулся с ситуацией, когда в XtraTreeList ширина первого столбца при большом количестве уровней вложенности составляет величину, достаточную для отображения этих уровней вложенности (см. вложение). Изменение ширины этого столбца эффекта не дает, как это побороть не знаю .
Может кто-то уже решал подобную проблему?


Автор: pazlik
Дата сообщения: 15.03.2007 16:42
Есть задача динамического формирования колонок в грид.
То есть часть колонок формируется из обычной таблицы, а часть из таблицы вида
id записи главой таблицы, id поля,
значение по id поля определяется тип и название поля, т.е. поля представлены в виде нескольких записей.
Нужно реализовать полноценную, прозрачную для пользователя работу с эти полями.
Может есть наработанные решения, функции или просто алгоритмы реализации.
Кто сталкивался или знает подскажите.
Автор: jicoff
Дата сообщения: 15.03.2007 17:57
Oweb

Просто так - никак. Два level'а одновременно не отображаются. Вот если бы ты смог запихнуть грид с чатом в ячейку другого грида, тогда можно было бы повозиться. Но гарантий нет, что он захочет отображать чужеродный editor, пусть даже и свой грид.
Автор: Alkatraz
Дата сообщения: 15.03.2007 21:03
pazlik
Хммм... Наработки, наверное есть, но под каждый конкретный случай все-равно приходится перекраивать...

В данном случае не вижу проблеммы - в гриде объявляются не привязанные колонки и вешаются обработчики на GetDataText и OnEditChanged, где с данными ведется работа. Пользователь не будет даже подозревать, что часть колонок берется не из базы данных...

Добавлено:
Oweb
А если попробовать сделать грид с двумя записями (UnBound), а к ним прицепить уже данные с двух других View, где в одном будет Chart, а в другом таблица? При показе формы в грид добавляются две записи с четко заданными ключами, а кним Detail'ами привязываются два других View.
Что-то в таком роде...
Автор: Dennica
Дата сообщения: 16.03.2007 08:39
VoodooSV
Насчет что тут можно сделать незнаю. Могу разве что предложить попробовать выставить OptionsView.PaintStyle = tlpsCategorized + выбрать OptionsView.CategorizedColumn.
Мне стало интересно, у тебя на скрине строки раскрашены градиентным цветом. Это только в дот нэт возможно или ты сам раскраску писал?
Автор: yuish
Дата сообщения: 16.03.2007 09:57
Кто нить может подсказать как работать с cxShellBrowserDialog?
как открыть понятно cxShellBrowserDialog1.execute. А как получить то что он выбрал?

Вопрос снят. Разобрался.
Автор: iogun
Дата сообщения: 16.03.2007 10:06
jicoff

Цитата:

iogun

Не пробовал такой подход к решению задачи:

TcxCustomRow -> ViewInfo -> RowValueInfo[ARecordIndex, ACellIndex: Integer] -> DisplayValue

спсибо, работает
Автор: VoodooSV
Дата сообщения: 16.03.2007 12:59
Dennica
Спасибо, что откликнулся, но не нахожу я таких св-в. Начинаю переходить с Delphi на c#, и был несколько удивлен таким поведением дерева Может я конечно не вижу очевидных св-в, но отличие компонент от тех, которые были под Делфи - существенно...


Цитата:
Мне стало интересно, у тебя на скрине строки раскрашены градиентным цветом. Это только в дот нэт возможно или ты сам раскраску писал?


В XtraTreeList есть св-ва для автоматической раскраски четных и нечетных строк дерева:
OptionsView.EnableAppearanceEvenRow = True
OptionsView.EnableAppearanceOddRow = True
Автор: Dennica
Дата сообщения: 16.03.2007 13:52
VoodooSV

Цитата:
В XtraTreeList есть св-ва для автоматической раскраски четных и нечетных строк дерева:
OptionsView.EnableAppearanceEvenRow = True
OptionsView.EnableAppearanceOddRow = True

Я немного не это имел ввиду. У тебя на скрине, у каждой строки внизу цвет немного темней чем вверху и идет плавный переход. Т.к. цвета довольно близки друг к другу в глаза это не бросается но эффект объема придает. Ну да ладно, видимо фишка в дот нэт, раз ты ничего сам не предпринимал.
Автор: mavrtuva
Дата сообщения: 16.03.2007 13:53
При работе с бэнд таблицей нужно изменить высоту строк когда столбцы расположены не в одну строку
(свойство DataRowHight работает только когда столбцы расположены в одну строку) может кто подскажет как это можно сделать.

случай
procedure ?.DoGetCellHeight(Sender: TcxCustomGridTableView;
ARecord: TcxCustomGridRecord; AItem: TcxCustomGridTableItem;
ACellViewInfo: TcxGridTableDataCellViewInfo; var AHeight: Integer);
begin
AHeight := ...;
end;

работает только когда cxGrid установлен в DBTable, а нужно в Banded

Кто может подсказать, очень нужно, горю с дипломом

Автор: mcdie
Дата сообщения: 16.03.2007 15:26
VadimLou, mavrtuva

Код:
cxGridDBTableView.OnGetCellHeight := DoGetCellHeight;

procedure ?.DoGetCellHeight(Sender: TcxCustomGridTableView;
ARecord: TcxCustomGridRecord; AItem: TcxCustomGridTableItem;
ACellViewInfo: TcxGridTableDataCellViewInfo; var AHeight: Integer);
begin
AHeight := ...;
end;
Автор: Xaoc666
Дата сообщения: 16.03.2007 17:58
Приветствую Вас.

Обнаружил ошибку в cxGrid 6. Причем она не изчезла и в февральской сборке. Суть ее в следующем:
Создаем грид с мастерь-деталь вьюхами. В частности, вьюхи работают в provider-mode, т.е. через наследника TcxCustomDataSource. Для каждой вьюхи устанавливаем свойства опций данных Appending = true; Таким образом если выделена последняя запись вьюхи (мастера или детали, не важно) и пользователь нажимает стрелку вниз, то появляется новая пустая запись для вставки. Если нажать стрелку вниз повторно, то ситуация такая:
1. Если новая запись является новой записью мастера, то все ок.
2. Если новая запись является новой записью детали, и запись мастера не последняя в гриде, то все ок (в февральской сборке. В ноябрьской происходил Access violation).
3. Если новая запись является новой записью детали, и запись мастера _последняя_ в гриде, то Access Violation происходит даже в февральской сборке, т.е. ошибка не изчезла полностью.

В кноуледжбэйз этот вопрос поднимался счастливым обладателем лицензионной копии. (BugReport ID: CB4425, https://www.devexpress.com/Support/Center/ViewIssue.aspx?issueid=CB4425&searchtext=Access+Violation&pgid=48409584-e723-41af-b1d3-52dd97577823&pid=8b369e9e-f81b-4a73-822e-37c84ccafcf7). Но разработчикам не удалось воспроизвести глюк, и я думаю, что это потому, что в их примере они используют ДБ вьюхи, в которых все действительно работает. Глюк видимо присущ именно provider-mode.

Покопался в исходниках, и мне показалось, что причина в функции FocusNextRecord(...) класса TcxGridTableView. В случае 3. в ней происходит вызов функции CreateNewRecord(True) но у другой вьюхи (у вьюхи мастера), а затем происходит завершение вызова обработчика стрелки вниз для вьюхи-деталей, которая уже уничтожилась при потере фокуса!

Вопрос к Вам. Может быть кто-то разбирался с этой ошибкой подробнее? Или даже лечил ее? Поделитесь опытом.

Спасибо.
Автор: Alkatraz
Дата сообщения: 17.03.2007 10:07
Часто приходится править руками, подстраивая грид под некоторые особенности своей программы. Так например мне пришлось ставить Try..Except в исходниках грида при всех попытках удаления из DataSet'а, так как в моих таблицах, при определенных условиях вызывался Abort на BeforeDelete и грид уже не отрабатывал следующие записи в выборке...

Попробуй исправить сам, а там жди результата...
Автор: Xaoc666
Дата сообщения: 17.03.2007 12:00
Alkatraz

Ну... это как-то некрасиво. Если бы исправдения касались одной-двух функций, это нормально, но если придется вставлять try...except или проверки на nil в десятках методов разных классов... Мало того, что можно пропустить пару-тройку таких методов, и словить глюк потом, уже в работающем приложении, так еще при обновлении ДевЭкспресса придется эту операцию повторять заново (если конечно, разработчики ее не подлечат).

П.С. Может кто-нибудь с легальной копией мог бы отписать на кноуледжбэйз уточнения данной ошибки, описанные в моем предидущем сообщении, чтобы разработчики ее сами исправили? Был бы ему очень благодарен.
Автор: Xaoc666
Дата сообщения: 18.03.2007 00:45
Вроде бы удалось победить ошибку с добавлением новой строки в детали и повторным нажатием кнопки "вниз". Мой вопрос снимается.


Код:
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;
}
...
Автор: Dronton2
Дата сообщения: 20.03.2007 11:14
В мартовской версии, взятой из ссылки в шапке, в компоненте TcxDBTreeList глюк: при добавлении новой строки (например, посредством нажатия кнопки Insert) выдаётся сообщение: "RecordIndex вышел за границы диапазона".
Это только у меня такое творится?
Откатился на февральскую версию.
Автор: DragFaq
Дата сообщения: 20.03.2007 18:24
Поздскажите хоть кто-то, пожалуйста. Нужно пройтись по выделенным записям в 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;

Но у заказчика уже вылез глюк, когда он воспользовался фильтром, а потом выполнил эту функцию... Аксес виолейшн.
Автор: jicoff
Дата сообщения: 20.03.2007 19:44
DragFaq

Что сильно сомневаюсь, что такая конструкция вообще может правильно работать. Несмотря на автосинхронизацию, если таковая установлена, эта самая синхронизация будет выполняться после того, как грид обратно получит управление, т.е. фактически в idle режиме.

Тебе надо не по датасету "бродить", а по GridView->Controller->SelectedRecords[RowIndex],
при условии что RowIndex меньше GridView->Controller->SelectedRecordCount.
Автор: VoodooSV
Дата сообщения: 21.03.2007 09:21
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]
Автор: DragFaq
Дата сообщения: 21.03.2007 14:42
Спасибо за ответы, но до этого тоже я додумывался. Вся сложность в том, что мне надо при проходе менять значения в некоторых полях этих выделенных строк. Потому я и работал через датасет. а вот в случае GridView->Controller->SelectedRecords[RowIndex], я могу сним работать только ридонли.
Автор: shulum
Дата сообщения: 21.03.2007 18:18
TcxBlobEdit
вопрос - как извлечь информацию из него? т.е. например вставлена картинка через интерфейс, а необходимо получить ее в виде потока, либо как Tbitmap, но именно из самого компонента.

Документацию читал - не нашел. Если есть возможность - помогите пожалуйста!

Заранее спасибо.

С уважением!
Автор: Glukodel
Дата сообщения: 21.03.2007 20:54
есть вопрос - как в TcxLookupComboBox при показе 2-х (и более колонок) из TdxMemData после выбора значения из списка заставить компонент показывать значения из всех колонок, если показываемое поле задается через интовое ListFieldIndex?
буду признателен за варианты - 2-й день ничё толкового не могу придумать....

P.S. вообще-то у меня наследник от TcxLookupComboBox - т.е. очень интересно, чего ему можно переопределить для достижения цели...
Автор: waik
Дата сообщения: 22.03.2007 11:48
Раз уж вопрос про TdxMemData прозвучал: он вообще умеет сортировать по нескольким полям? Никогда не надо было, а тут ткнулся- а не сортирует. По одному легко, а по двум трём?

Glukodel
По моему в таком случае (если через ListFieldIndex) то не получится. А что мешает зная FieldIndex заполнить ListFieldNames через точку с запятой? Или добавить в ListColumns несколько полей?

Страницы: 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182

Предыдущая тема: Язык программирования на русском языке


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