а как в дизайне или программно запихнуть в GroupByBox?
» Использование DevExpress 2
X11
Цитата:
Ну в дизайнере судя по скринам ты уже умееш группировать
Програмно можно так: Column1.GroupBy(1, False);
Цитата:
а как в дизайне или программно запихнуть в GroupByBox?
Ну в дизайнере судя по скринам ты уже умееш группировать
Програмно можно так: Column1.GroupBy(1, False);
Подскажите, как программно развернуть всё или свернуть всё, т.е. полностью все ветки грида?
Добавлено:
разобрался
dbgItog.ViewData.Collapse(True);
dbgItog.ViewData.expand(True);
Добавлено:
разобрался
dbgItog.ViewData.Collapse(True);
dbgItog.ViewData.expand(True);
На форме лежит cxRadioGroup, в нем три итема, проблема в том, запускаю программа, щёлкаю по компоненте, а выбрать получатся только получается только первый, как ни щёлкай, остальные 2 выбрать не получается, что я не так делаю?
На другой форме тоже есть точно такой же cxRadioGroup и он нормально пашет
Друзья, что делать, выручайте как можно быстрее
Добавлено:
да вот даже на одной форме лежит нескольк cxRadioGroup`оп, у одних можно все итемы выбрать, у других только первый, вернее нулевой
Добавлено:
даже в дизайне ставлю ItemIndex хоть 1, хоть 2 в Инспекторе Свойств, всё равно выбран нулевой итем
Добавлено:
дошло вроде, у ненормальных компонент, итемы имеют тип значения Boolean, а у нормальных (Null)
Добавлено:
vожет кто-нить пояснить, как же тогда выбирать итемы, когда у них тип не Null?
Добавлено:
Кто подскажет, как изменить программно колонтитулы в dxComponentPrinter?
На другой форме тоже есть точно такой же cxRadioGroup и он нормально пашет
Друзья, что делать, выручайте как можно быстрее
Добавлено:
да вот даже на одной форме лежит нескольк cxRadioGroup`оп, у одних можно все итемы выбрать, у других только первый, вернее нулевой
Добавлено:
даже в дизайне ставлю ItemIndex хоть 1, хоть 2 в Инспекторе Свойств, всё равно выбран нулевой итем
Добавлено:
дошло вроде, у ненормальных компонент, итемы имеют тип значения Boolean, а у нормальных (Null)
Добавлено:
vожет кто-нить пояснить, как же тогда выбирать итемы, когда у них тип не Null?
Добавлено:
Кто подскажет, как изменить программно колонтитулы в dxComponentPrinter?
Разрешил пользователям менять высоту строк, да теперь текст в яцейках виден в 2-3 строки, но при печати текст всё равно в одну строку, есть решение этой проблемы?
{DevExpr_11_apr_2007}
Добавлено:
Вопрос по CxGrid: как выделять записи с помощью Ctrl и мыши, ну т.е. мне нужно выделить записи вразброс: первую, вторую, пятую, седьмую.
{DevExpr_11_apr_2007}
Добавлено:
Вопрос по CxGrid: как выделять записи с помощью Ctrl и мыши, ну т.е. мне нужно выделить записи вразброс: первую, вторую, пятую, седьмую.
X11
включи MultiSelect в труе
включи MultiSelect в труе
так включено, подряд несколько записей или все записи можно выделить, а как выделить первую, третью и пятую (с пом. Ctrl и мышки), а???
Доброе время суток.
Я честно пытался найти ответ в обеих темах, но совсем запутался.
Как можно в 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.
Пытался понять как выделяет встроенный "инкрементный поиск", но так и не смог, буду благодарен, если кто-нибудь наставит на "путь истинный".
Я честно пытался найти ответ в обеих темах, но совсем запутался.
Как можно в 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.
Пытался понять как выделяет встроенный "инкрементный поиск", но так и не смог, буду благодарен, если кто-нибудь наставит на "путь истинный".
Доброго времени суток!
Проблема следующая.
d2005, qgrid 6. cxgrid, cxtableview
Нужно в runtime присваивать значения ячейкам грида.
В хелпе написано, что так можно. В тестовом примете получилось с первого раза:
cxTableView.DataСoltroller.Values[i,j]:=...;
Но вот в чём прикол. Повторить такое чудо больше не удалось, как ни стараюсь.
Пробую копировать этот грид на эту же форму, сверяю ВСЕ свойства вью, код тот же, а ячейки просто пустые.
Где собака зарыта, подскажите кто-то!! Опыта работы с этим монстром пока нет, и хелп ничем не смог помочь
Проблема следующая.
d2005, qgrid 6. cxgrid, cxtableview
Нужно в runtime присваивать значения ячейкам грида.
В хелпе написано, что так можно. В тестовом примете получилось с первого раза:
cxTableView.DataСoltroller.Values[i,j]:=...;
Но вот в чём прикол. Повторить такое чудо больше не удалось, как ни стараюсь.
Пробую копировать этот грид на эту же форму, сверяю ВСЕ свойства вью, код тот же, а ячейки просто пустые.
Где собака зарыта, подскажите кто-то!! Опыта работы с этим монстром пока нет, и хелп ничем не смог помочь
Код:
cxTableView.DataСoltroller.Values[cxTableView.DataСoltroller.focusedRecordIndex, cxTableViewColumn1.index ]:=...;
Не работает
Собственно код теперь вот такой (там вначале часть данных берётся из квери):
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;
Строки есть в итоге, но пустые.
Собственно код теперь вот такой (там вначале часть данных берётся из квери):
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;
Строки есть в итоге, но пустые.
ну конечно НЕ работает, ты ж забыл вызвать
сxGrid1TableView1.DataController.append;
....
сxGrid1TableView1.DataController.post;
сxGrid1TableView1.DataController.append;
....
сxGrid1TableView1.DataController.post;
Теперь кусок имеет вид:
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)"
Уже совсем ничего не понимаю. %(
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)"
Уже совсем ничего не понимаю. %(
посмотри, на какой строке кода вываливается сообщение
в последней.
Цитата:
cxGrid2TableView1.EndUpdate;
в этой что-ли?
cxGrid2TableView1.EndUpdate;
да, в этой. причём в дебагере видно, что значения ячейкам присваиваются.
но после ошибки грид пустой.
да, в этой. причём в дебагере видно, что значения ячейкам присваиваются.
но после ошибки грид пустой.
Цитата:
cxGrid2TableView1.BeginUpdate;
Цитата:
cxGrid2TableView1.EndUpdate;
закомментируй эти строки и посмотри что получиццо
пробовал ошибка возникает тогда на
cxGrid2TableView1.DataController.RecordCount:=QueryRep.RecordCount;
та же: list index...
cxGrid2TableView1.DataController.RecordCount:=QueryRep.RecordCount;
та же: list index...
Цитата:
cxGrid2TableView1.DataController.RecordCount:=QueryRep.RecordCount;
зачем ты это делаешь, убери
попробовал. интересная штука: ставлю Watch на cxGrid2TableView1.DataController.RecordCount. После
cxGrid2TableView1.DataController.Append;
записей 1, после Post опять 0. следующая итерация - опять 1 (а i у нас уже 2), и тут ошибка появлеется типа
Record Index out of range
cxGrid2TableView1.DataController.Append;
записей 1, после Post опять 0. следующая итерация - опять 1 (а i у нас уже 2), и тут ошибка появлеется типа
Record Index out of range
а так?
Код:
Grid1.DataController.append;
Grid1.Columns[1].EditValue := tlf2;
Grid1.Columns[4].EditValue := re1.lines[i];
Grid1.DataController.post;
Код:
Grid1.DataController.append;
Grid1.Columns[1].EditValue := tlf2;
Grid1.Columns[4].EditValue := re1.lines[i];
Grid1.DataController.post;
да!! так заработало!
большущее спасибо, дружище!
большущее спасибо, дружище!
Есть у меня функция:
[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 := ...
т.к. пользователь может переместить колонки
[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 := ...
т.к. пользователь может переместить колонки
Доброе время суток.
Хотя на предыдущий мой вопрос
Цитата:
так никто и не ответил, у меня возник ещё один:
как GridDBTableView осуществляет передачу фокуса? У меня как-то странно получается:
если например 50-100 тысяч записей, скроллбаром перехожу в самый низ таблицы - все отрисовывается быстро, я вижу последние записи. Но если по ним щелкнуть мышкой - перед тем, как эта ячейка выделится, проходит несколько минут, в течение которых что-то выполняется из msadce.dll, насколько я понял это связано с AdoDataSet. Никто не разбирался в подобных подробностях?
Хотя на предыдущий мой вопрос
Цитата:
Как можно в cxGridDBTableView выделить подстроку в ячейке? (по аналогии как выделяется текст, если использовать инкрементный поиск).
так никто и не ответил, у меня возник ещё один:
как GridDBTableView осуществляет передачу фокуса? У меня как-то странно получается:
если например 50-100 тысяч записей, скроллбаром перехожу в самый низ таблицы - все отрисовывается быстро, я вижу последние записи. Но если по ним щелкнуть мышкой - перед тем, как эта ячейка выделится, проходит несколько минут, в течение которых что-то выполняется из msadce.dll, насколько я понял это связано с AdoDataSet. Никто не разбирался в подобных подробностях?
aleksandrus
тут имхо проблемы не у грида, а у ADO. Там банальный Locate на большем кол-ве записей будет очень долго идти. Можно конечно выставить GridMode, что-бы данные кешировались, но тогда ты не сможешь проскролить сразу грид до конца, так что лучше взять быстрые компоненты прямого доступа к твоей субд (SDAC/ODAC/..) или AnyDAC (имхо он помедленние SDAC'а). Еще можно залить содержимое датасета в ClientDataSet, операция долгая, зато потом при скроле никаких тормозов не будет
насчeт первого вопроса - можно воспользоваться стандартным search'ем, после установки FocusedRecordIndex:
DataController.Search.Locate(ColumnIndex, Text)
он и выделит нужный текст в текущей ячейке...
тут имхо проблемы не у грида, а у ADO. Там банальный Locate на большем кол-ве записей будет очень долго идти. Можно конечно выставить GridMode, что-бы данные кешировались, но тогда ты не сможешь проскролить сразу грид до конца, так что лучше взять быстрые компоненты прямого доступа к твоей субд (SDAC/ODAC/..) или AnyDAC (имхо он помедленние SDAC'а). Еще можно залить содержимое датасета в ClientDataSet, операция долгая, зато потом при скроле никаких тормозов не будет
насчeт первого вопроса - можно воспользоваться стандартным search'ем, после установки FocusedRecordIndex:
DataController.Search.Locate(ColumnIndex, Text)
он и выделит нужный текст в текущей ячейке...
Hi!
Задача в следующем:
есть главная таблица, в которой автоинкрементальное поле является ключом к другим таблицам. На форме есть два грида. Их нужно заполнить до того, как я получу ключ из главной таблицы, сохранив в нее запись. Как можно отобразить в гридах значения без записи их в соответствующие таблицы?
СПАСИБО!
Задача в следующем:
есть главная таблица, в которой автоинкрементальное поле является ключом к другим таблицам. На форме есть два грида. Их нужно заполнить до того, как я получу ключ из главной таблицы, сохранив в нее запись. Как можно отобразить в гридах значения без записи их в соответствующие таблицы?
СПАСИБО!
clear2121, ты хочешь средствами cxGrid`а такое провернуть? а смысл.
Люди добрые, подскажите, где скачать ExpressSkins Library для D7 ? Умаялся искать ужо. Если можете ссылку, либо архив, киньте на IceMan_T@mail.ru
X11
Смысл в том, что если пользователь откажется от ввода, то я все просто забываю. Идея в следующем: имеем ящик, а в нем кучу инструментов. Делаю форму, где пользователь заносит имя ящика, а в гриде перечисляет инструменты. Так вот, ящик еще не записан в таблицу и я не знаю его кода, но инструменты пользователь уже заносит. Если он откажется, то я все забываю, если нет, то сохраняю запись в главной таблице, получаю код и в цикле (думаю так) сохраняю записи из грида. Но как такое провернуть с помощью cxGridа не знаю. Может есть другой механизм?
СПАСИБО!
Смысл в том, что если пользователь откажется от ввода, то я все просто забываю. Идея в следующем: имеем ящик, а в нем кучу инструментов. Делаю форму, где пользователь заносит имя ящика, а в гриде перечисляет инструменты. Так вот, ящик еще не записан в таблицу и я не знаю его кода, но инструменты пользователь уже заносит. Если он откажется, то я все забываю, если нет, то сохраняю запись в главной таблице, получаю код и в цикле (думаю так) сохраняю записи из грида. Но как такое провернуть с помощью cxGridа не знаю. Может есть другой механизм?
СПАСИБО!
Страницы: 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
Предыдущая тема: Язык программирования на русском языке
Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.