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

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

Автор: X11
Дата сообщения: 03.09.2007 12:27
а как в дизайне или программно запихнуть в GroupByBox?
Автор: Dennica
Дата сообщения: 03.09.2007 12:37
X11

Цитата:
а как в дизайне или программно запихнуть в GroupByBox?

Ну в дизайнере судя по скринам ты уже умееш группировать
Програмно можно так: Column1.GroupBy(1, False);
Автор: X11
Дата сообщения: 03.09.2007 14:07
Подскажите, как программно развернуть всё или свернуть всё, т.е. полностью все ветки грида?

Добавлено:
разобрался
dbgItog.ViewData.Collapse(True);
dbgItog.ViewData.expand(True);
Автор: X11
Дата сообщения: 04.09.2007 14:21
На форме лежит cxRadioGroup, в нем три итема, проблема в том, запускаю программа, щёлкаю по компоненте, а выбрать получатся только получается только первый, как ни щёлкай, остальные 2 выбрать не получается, что я не так делаю?
На другой форме тоже есть точно такой же cxRadioGroup и он нормально пашет
Друзья, что делать, выручайте как можно быстрее

Добавлено:
да вот даже на одной форме лежит нескольк cxRadioGroup`оп, у одних можно все итемы выбрать, у других только первый, вернее нулевой

Добавлено:
даже в дизайне ставлю ItemIndex хоть 1, хоть 2 в Инспекторе Свойств, всё равно выбран нулевой итем

Добавлено:
дошло вроде, у ненормальных компонент, итемы имеют тип значения Boolean, а у нормальных (Null)

Добавлено:
vожет кто-нить пояснить, как же тогда выбирать итемы, когда у них тип не Null?

Добавлено:
Кто подскажет, как изменить программно колонтитулы в dxComponentPrinter?
Автор: X11
Дата сообщения: 05.09.2007 10:08
Разрешил пользователям менять высоту строк, да теперь текст в яцейках виден в 2-3 строки, но при печати текст всё равно в одну строку, есть решение этой проблемы?
{DevExpr_11_apr_2007}

Добавлено:
Вопрос по CxGrid: как выделять записи с помощью Ctrl и мыши, ну т.е. мне нужно выделить записи вразброс: первую, вторую, пятую, седьмую.
Автор: yuish
Дата сообщения: 05.09.2007 11:37
X11
включи MultiSelect в труе
Автор: X11
Дата сообщения: 05.09.2007 11:50
так включено, подряд несколько записей или все записи можно выделить, а как выделить первую, третью и пятую (с пом. Ctrl и мышки), а???
Автор: aleksandrus
Дата сообщения: 06.09.2007 16:38
Доброе время суток.
Я честно пытался найти ответ в обеих темах, но совсем запутался.
Как можно в cxGridDBTableView выделить подстроку в ячейке? (по аналогии как выделяется текст, если использовать инкрементный поиск).
я написал что-то навроде этого:

if( (cxGrid1DBTableView1->DataController->GetDisplayText(i, j)).AnsiPos(asText) > 0)
{
cxGrid1DBTableView1->Controller->FocusedRecordIndex = i;
cxGrid1DBTableView1->Controller->FocusedColumnIndex = j;
cxGrid1DBTableView1->Controller->EditingItem = cxGrid1DBTableView1->Controller->FocusedItem;
TcxCustomTextEdit *edtTest =
(TcxCustomTextEdit*)cxGrid1DBTableView1->Controller->FocusedItem;
if(edtTest)
{
edtTest->SetSelection(0,1);
}

Но работает только если в гриде разрешено редактировать ячейки, а у меня как раз стоит cxGrid1DBTableView1->OptionsDara->Editing = false; и ячейки "readonly", соответственно edtTest получается NULL.
Пытался понять как выделяет встроенный "инкрементный поиск", но так и не смог, буду благодарен, если кто-нибудь наставит на "путь истинный".
Автор: brookson
Дата сообщения: 06.09.2007 20:16
Доброго времени суток!

Проблема следующая.
d2005, qgrid 6. cxgrid, cxtableview

Нужно в runtime присваивать значения ячейкам грида.
В хелпе написано, что так можно. В тестовом примете получилось с первого раза:

cxTableView.DataСoltroller.Values[i,j]:=...;

Но вот в чём прикол. Повторить такое чудо больше не удалось, как ни стараюсь.
Пробую копировать этот грид на эту же форму, сверяю ВСЕ свойства вью, код тот же, а ячейки просто пустые.

Где собака зарыта, подскажите кто-то!! Опыта работы с этим монстром пока нет, и хелп ничем не смог помочь
Автор: X11
Дата сообщения: 07.09.2007 07:57

Код:
cxTableView.DataСoltroller.Values[cxTableView.DataСoltroller.focusedRecordIndex, cxTableViewColumn1.index ]:=...;
Автор: brookson
Дата сообщения: 07.09.2007 10:31
Не работает
Собственно код теперь вот такой (там вначале часть данных берётся из квери):

cxGrid1TableView1.BeginUpdate;
cxGrid1TableView1.DataController.RecordCount:=QueryRep.RecordCount;
i:=0;
while not QueryREP.Eof do begin
сxGrid1TableView1.DataController.Values[i,сxGrid1TableView1Column1.Index]:=QueryRep.FieldByName('l_name').AsString;
cxGrid1TableView1.DataController.Values[i,сxGrid1TableView1Column2.Index]:=QueryRep.FieldByName('ss').AsString;
cxGrid1TableView1.DataController.Values[i,сxGrid1TableView1Column3.Index]:=QueryRep.FieldByName('sp').AsString;
QueryRep.Next;
i:=i+1;
end;
cxGrid1TableView1.EndUpdate;

Строки есть в итоге, но пустые.
Автор: X11
Дата сообщения: 07.09.2007 11:03
ну конечно НЕ работает, ты ж забыл вызвать
сxGrid1TableView1.DataController.append;

....

сxGrid1TableView1.DataController.post;
Автор: brookson
Дата сообщения: 07.09.2007 11:36
Теперь кусок имеет вид:

cxGrid2TableView1.BeginUpdate;
cxGrid2TableView1.DataController.RecordCount:=QueryRep.RecordCount;
i:=0;
while not QueryREP.Eof do begin
cxGrid2TableView1.DataController.Append;
cxGrid2TableView1.DataController.Values[i,0]:=QueryRep.FieldByName('l_name').AsString;
cxGrid2TableView1.DataController.Values[i,1]:=QueryRep.FieldByName('ss').AsString;
cxGrid2TableView1.DataController.Values[i,2]:=QueryRep.FieldByName('sp').AsString;
cxGrid2TableView1.DataController.Post;
QueryRep.Next;
i:=i+1;
end;
cxGrid2TableView1.EndUpdate;

И ошибка "List index out of bounds(0)"
Уже совсем ничего не понимаю. %(
Автор: X11
Дата сообщения: 07.09.2007 11:56
посмотри, на какой строке кода вываливается сообщение
Автор: brookson
Дата сообщения: 07.09.2007 12:15
в последней.
Автор: X11
Дата сообщения: 07.09.2007 12:26

Цитата:
cxGrid2TableView1.EndUpdate;

в этой что-ли?
Автор: brookson
Дата сообщения: 07.09.2007 12:40
cxGrid2TableView1.EndUpdate;
да, в этой. причём в дебагере видно, что значения ячейкам присваиваются.
но после ошибки грид пустой.

Автор: X11
Дата сообщения: 07.09.2007 13:03

Цитата:
cxGrid2TableView1.BeginUpdate;


Цитата:
cxGrid2TableView1.EndUpdate;

закомментируй эти строки и посмотри что получиццо
Автор: brookson
Дата сообщения: 07.09.2007 13:10
пробовал ошибка возникает тогда на

cxGrid2TableView1.DataController.RecordCount:=QueryRep.RecordCount;

та же: list index...
Автор: X11
Дата сообщения: 07.09.2007 13:33

Цитата:
cxGrid2TableView1.DataController.RecordCount:=QueryRep.RecordCount;

зачем ты это делаешь, убери
Автор: brookson
Дата сообщения: 07.09.2007 13:42
попробовал. интересная штука: ставлю Watch на cxGrid2TableView1.DataController.RecordCount. После
cxGrid2TableView1.DataController.Append;
записей 1, после Post опять 0. следующая итерация - опять 1 (а i у нас уже 2), и тут ошибка появлеется типа
Record Index out of range
Автор: X11
Дата сообщения: 07.09.2007 13:49
а так?


Код:
Grid1.DataController.append;
Grid1.Columns[1].EditValue := tlf2;
Grid1.Columns[4].EditValue := re1.lines[i];
Grid1.DataController.post;
Автор: brookson
Дата сообщения: 07.09.2007 14:14
да!! так заработало!
большущее спасибо, дружище!
Автор: X11
Дата сообщения: 07.09.2007 14:17
Есть у меня функция:
[code]
function CheckGridLink(ActiveControl:TObject): Boolean;
Var
cxGrid : TcxGrid;
AView : TcxGridDBTableView;

begin
.....

if (ActiveControl is TcxGridSite) then begin
как дальше выяснить цепочку, которая привела бы собственно к cxGridDBTableView
где и можно добраться к данным


этот код нерабочий, из справки вычитал, что Container возвращает TcxGrid, справка, правда ещё по четвертой версии
if (ActiveControl is TcxGridSite) then begin
cxGrid := (TcxGridSite(ActiveControl).Container as TcxGrid);
AView := (cxGrid.ActiveLevel.GridView as TcxGridDBTableView);

if AView.DataController.DataSource = nil then begin
ShowMessage('Таблица не привязана к источнику данных');
result := false;
exit;
end
....
[code]

Добавлено:
можно так, как Вы уже догадались, наверное:

Grid1.Columns[Grid1Column1.index].editvalue := ...

т.к. пользователь может переместить колонки
Автор: aleksandrus
Дата сообщения: 07.09.2007 16:08
Доброе время суток.
Хотя на предыдущий мой вопрос

Цитата:
Как можно в cxGridDBTableView выделить подстроку в ячейке? (по аналогии как выделяется текст, если использовать инкрементный поиск).

так никто и не ответил, у меня возник ещё один:
как GridDBTableView осуществляет передачу фокуса? У меня как-то странно получается:
если например 50-100 тысяч записей, скроллбаром перехожу в самый низ таблицы - все отрисовывается быстро, я вижу последние записи. Но если по ним щелкнуть мышкой - перед тем, как эта ячейка выделится, проходит несколько минут, в течение которых что-то выполняется из msadce.dll, насколько я понял это связано с AdoDataSet. Никто не разбирался в подобных подробностях?
Автор: A_V
Дата сообщения: 08.09.2007 14:24
aleksandrus
тут имхо проблемы не у грида, а у ADO. Там банальный Locate на большем кол-ве записей будет очень долго идти. Можно конечно выставить GridMode, что-бы данные кешировались, но тогда ты не сможешь проскролить сразу грид до конца, так что лучше взять быстрые компоненты прямого доступа к твоей субд (SDAC/ODAC/..) или AnyDAC (имхо он помедленние SDAC'а). Еще можно залить содержимое датасета в ClientDataSet, операция долгая, зато потом при скроле никаких тормозов не будет

насчeт первого вопроса - можно воспользоваться стандартным search'ем, после установки FocusedRecordIndex:
DataController.Search.Locate(ColumnIndex, Text)
он и выделит нужный текст в текущей ячейке...
Автор: clear2121
Дата сообщения: 10.09.2007 07:28
Hi!
Задача в следующем:
есть главная таблица, в которой автоинкрементальное поле является ключом к другим таблицам. На форме есть два грида. Их нужно заполнить до того, как я получу ключ из главной таблицы, сохранив в нее запись. Как можно отобразить в гридах значения без записи их в соответствующие таблицы?

СПАСИБО!
Автор: X11
Дата сообщения: 10.09.2007 07:59
clear2121, ты хочешь средствами cxGrid`а такое провернуть? а смысл.
Автор: IceMan T
Дата сообщения: 10.09.2007 08:08
Люди добрые, подскажите, где скачать ExpressSkins Library для D7 ? Умаялся искать ужо. Если можете ссылку, либо архив, киньте на IceMan_T@mail.ru
Автор: clear2121
Дата сообщения: 10.09.2007 08:22
X11
Смысл в том, что если пользователь откажется от ввода, то я все просто забываю. Идея в следующем: имеем ящик, а в нем кучу инструментов. Делаю форму, где пользователь заносит имя ящика, а в гриде перечисляет инструменты. Так вот, ящик еще не записан в таблицу и я не знаю его кода, но инструменты пользователь уже заносит. Если он откажется, то я все забываю, если нет, то сохраняю запись в главной таблице, получаю код и в цикле (думаю так) сохраняю записи из грида. Но как такое провернуть с помощью cxGridа не знаю. Может есть другой механизм?

СПАСИБО!

Страницы: 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182

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


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