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

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

Автор: X11
Дата сообщения: 20.02.2009 15:22
sldaac, ты меня запутал... в чём тогда проблема? По идее если что-то меняешь в гриде, то в датасете это тоже меняется.

А у тебя НЕ меняется?
Автор: Trasnev
Дата сообщения: 20.02.2009 15:58
afiget, vladman
Спасибо за ответы.
Автор: sldaac
Дата сообщения: 20.02.2009 16:22

Цитата:
По идее если что-то меняешь в гриде, то в датасете это тоже меняется.

А у тебя НЕ меняется?

Да если меняеш через интерфей, тот-же чек, мышкой чек-унчек - все работате.
Мне надо что-бы нажав на конопку на форме, у меня почекались или снялся чек на всех видимых записях в гриде, как будто я каждую прочекам мышкой. При этом в коде (Onclick) не использовать DataSet
Автор: f3ka
Дата сообщения: 20.02.2009 16:32
sldaac
а использовать Values у видимых записей датаконтроллера не получается?
или EditValue как нить установить?
Автор: vladman
Дата сообщения: 20.02.2009 17:46
sldaac


Цитата:
for yyy := 0 to (GV_EML.ViewData.RecordCount-1) do

Пробежит не по ВСЕМ ВИДИМЫМ записям во View, а по ВСЕМ В ПРИНЦИПЕ, т.е. по ВСЕМ попавшим в него из DataSet. Нужно помнить, что может быт применен фильтр, и тогда ВСЕ ВИДИМЫЕ <> ВСЕ.
Для ВСЕ ВИДИМЫЕ нужно использовать <YourView>.DataController.FilteredRecordCount-1

Уточнение
Цитата:
не использовать DataSet
не использовать из-за его видимости в этом обработчике или не использовать его методы в принципе?
Если первое - то можно воспользоваться <YourView>.DataController.Datasource.Dataset.
Если второе хотелось бы уточнить причину.
f3ka прав, можно воспользоваться <YourCheckBoxTcxGridDBColumn>.Value := 1 для check и <YourCheckBoxTcxGridDBColumn>.Value := 0 для unchek
А затем <YourView>.DataController.Post().
Но нужно учитывать, что

Цитата:
When a different record is focused, the data controller's Post method is called implicitly.
Note: Do not call the Post method within the BeginUpdate/EndUpdate and BeginFullUpdate/EndFullUpdate blocks.
Автор: X11
Дата сообщения: 20.02.2009 21:23
Дык нужно место Records использовать Rows

Добавлено:
У ViewData есть Rows

Добавлено:
По этой ссылке и вниз по страничке (может натолкнёт на правильную мысль)
http://forum.ru-board.com/topic.cgi?forum=33&topic=7918&start=1100#13


и ещё немного
http://www.automatedqa.com/community/Home/Articles/tabid/38/articleType/ArticleView/articleId/576/Default.aspx

https://community.devexpress.com/forums/t/52521.aspx


Добавлено:
Ну и погуглить можно на тему: ViewData Rows
Автор: vladman
Дата сообщения: 20.02.2009 23:44
X11

Цитата:
Дык нужно место Records использовать Rows

Если это по-поводу видимых записей, то как раз именно Records, чтобы потом не проверять является ли очередная Row записью таблицы (Data Row), либо строкой группирвки (Group Row), либо Filter Row, либо New Item Row.... Изменять значение чекбокса с последующий записью значения в таблицу БД находясь на Group Row, Filter Row, New Item Row думаю не совсем будет правильно.
Автор: VitOs2
Дата сообщения: 22.02.2009 10:30
Прошу помочь в следующем вопросе.
Есть БД. Есть грид с cxGridDBBandedTableView. Нужно отображать данные в таблице. При обрыве связи таблица должна работать в "офлайн" режиме. То-есть, продолжать отображать данные.
Сейчас реализация следующая:
Для того чтобы не пропадали данные из таблицы (нужны только для просмотра) при обрыве связи, я использую промежуточный TdxMemData с методом LoadFromDataSet(мой датасет) и подставляю его как источник данных для вьшки.
Дело в том, что, если данных много (у меня их может быть много), то двойное (а мне кажется, тройное) заполнение источников данных занимает довольно много времени.
1-й раз я закачиваю данные с сервера в свой датасет, потом в MemData и 3-й, если я правильно понял, в Datacontroller вьюшки.
Так вот, вопрос. Можно ли перекинуть данные с моего источника днанных сразу в DataСontroller вьюшки и использовать данные в офлайн режиме?
В помощи говорится про Unbound и про Provider режимы. Которые можна использовать для не DB вьюшек. Но я так и не понял как закидывать туда данные.

Может кто что посоветовать?

Спасибо!
Автор: X11
Дата сообщения: 22.02.2009 10:43
А если загружать всё прямо в грид, т.е. грид использовать как стринг-грид?
Автор: infomSB
Дата сообщения: 22.02.2009 13:11
VitOs2
А что собственно понимается под обрывом связи, ведь если ты используешь стандартный способ Connection-DataSet-TableView то подключение к БД нужно только для начальной загрузки данных. Или понимается что Connection ставиться в Connected:=False, может возможно просто убрать свойство KeepConnection (помоему так называется) и тогда продолжает ли существовать соединение после загрузки данных тебя не будет волновать в принципе.
Автор: VitOs2
Дата сообщения: 22.02.2009 14:10
X11
А более конкретно? Какимы методами закидывать данные в этот грид из датасета? Не использовать же FieldByName. Нужно что-то очень быстрое.

infomSB
Думал не расписывать полностью, но, наверное прийдется. Я использую:
ZConnection+zReadOnlyQuery+DataSource+.
У ZConnection свойства KeepConnection нет (я не нашел).
Программа работает чере интернет. Поэтому, нужно чтобы она нормально реагировала на обрывы связи. Думаю, здесь, для простоты, можно использовать и свойство Connected (false - обрыв связи). Если его поставить в False, тогда все zReadOnlyQuery очищаются. И, соответственно, таблица также стает пустой.
Поэтому и было реализовано через промежуточный датасет, который висит в памяти - dxMemData. Но, как я скзал, данные перекидываются около 3-х раз. Хочу выкинуть хотябы одно звено (dxMemData) и тем самым сократить время на заполнение таблицы.
Автор: brookson
Дата сообщения: 22.02.2009 18:49
Снова привет!
Возможно вопрос слегка глупый (может туплю где-то), но.
Кто подскажет, с помощью какого компонента можно пометить несколько записей в таблице?
Пример. Есть tbl1.id, tbl1.name.
Хочу видеть список из tbl1.name, чтоб можно было выделить (типа CheckBox) несколько записей и для дальнейшей обработки знать их tbl1.id.
Автор: Arch1S
Дата сообщения: 22.02.2009 19:53

Цитата:
пометить несколько записей в таблице

в таблицу или в таблицу некой базы, тогда вопрос, какую базу используешь? если mysql то пользуйся компанентами Zeos, если другую базу то смотри метод Protocol в TZConnection
Автор: brookson
Дата сообщения: 22.02.2009 20:06
использую Interbase, соответственно родной tibdataset или tibtable. хотелось бы обойтись (если можно) стандартными либо devexpress.
Автор: vladman
Дата сообщения: 23.02.2009 00:25
brookson

Цитата:
Хочу видеть список из tbl1.name, чтоб можно было выделить (типа CheckBox) несколько записей и для дальнейшей обработки знать их tbl1.id.

Здесь [How to set up an unbound item in a data-aware View] все подробно описано:
Автор: sam291074
Дата сообщения: 23.02.2009 11:23
И снова cxVertGrid. Как всетаки сделать, чтобы при изменении значения строки (событие OnChange) это изменение воспринималось сразу, а то надоело - фокус с таблицы снять, фокус на таблицу вернуть - при наличии скинов мигает как новогодняя елка. Подскажите, будьте добры.
Автор: vladman
Дата сообщения: 23.02.2009 12:38
sam291074

Цитата:
Подскажите, будьте добры.

Не плохо было бы посмотреть ваш код для более качественной подсказки
Автор: X11
Дата сообщения: 23.02.2009 13:58
sam291074
обрати внимание на свойства ImmediatePost. А также можно использовать код:
cxVertGrid1.HideEditor;
Автор: sam291074
Дата сообщения: 23.02.2009 15:12
vladman

Цитата:
Не плохо было бы посмотреть ваш код

void __fastcall TMainForm::cxVerticalGridRowPropertiesChange(TObject *Sender) {
cxGroupBox1->SetFocus(); cxVerticalGrid->SetFocus();
.......
}

Здесь после изменения Value в Row делаю перевод фокуса на GroupBox, содержащий VerticalGrid, а затем назад. Только после этого я могу воспользоваться установленным Value. Где-то на форуме писали, что можно так сделать.

Добавлено:
X11

Цитата:
обрати внимание на свойства ImmediatePost. А также можно использовать код:
cxVertGrid1.HideEditor;

Знаете, не нашел ни того, ни другого. Есть ImmediateEditor, он в true.
Есть HideEdit(), вроде помогает, посмотрю тщательней.
Автор: X11
Дата сообщения: 23.02.2009 16:15

Цитата:
ImmediatePost.

Это свойство имеют не все типы колонок вертикального грида. Щас дельфи нет под рукой. Возможно, что и сам грид имеет это свойство.
Автор: sam291074
Дата сообщения: 23.02.2009 16:41
X11

Цитата:
ImmediatePost.

Все, разобрался. Большое спасибо за правильное направление движения. Совершенно верно Вами замечено, что это свойство для строки (не для таблицы), да и то не для каждой, а от изменения которой что-то зависит (Spin, Combo, Check и т.д.). И тогда все очень просто. Начинаю проникаться уважением к DevExpress и людям, которые его понимают
Автор: Meister_Floh
Дата сообщения: 23.02.2009 17:22
Господа! Кто работал со Smart Record в ExpressDBTree. Что-то сам черт ногу сломит.. Может у кого есть готовый проект, чтоб посмотреть?
Автор: brookson
Дата сообщения: 23.02.2009 21:19
vladman

Цитата:
Здесь [How to set up an unbound item in a data-aware View] все подробно описано

Да, спасибо. Всё как я и делал, кроме SmartRefresh := True;

Но вот проблема - отметить (Checked) можно лишь 1 запись. При попытке отметить еще одну пометка с предыдущей снимается.
Что делать?
Автор: afiget
Дата сообщения: 23.02.2009 22:02

Цитата:
А если загружать всё прямо в грид, т.е. грид использовать как стринг-грид?

Не-не-не. Даже сами разработчики рекомендуют использовать MemData, как более производительный.
Автор: vladman
Дата сообщения: 24.02.2009 00:13
brookson

Цитата:
Что делать?

Проверить свойства редактора (CheckBox в данном случае). Может вы использовали RepositoryItem с какими-то специфическими настройками? Попробуйте установить свойство Properties этой GridDBColumn в CheckBox, и из всем значений свойств этого CheckBox изменить только свойство NullStyle на nssUnchecked (хотя это и не важно - не будет серых CheckBox'ов) - должно работать.
Автор: Meister Floh
Дата сообщения: 24.02.2009 09:11

Цитата:
Господа! Кто работал со Smart Record в ExpressDBTree. Что-то сам черт ногу сломит.. Может у кого есть готовый проект, чтоб посмотреть?


Уже разобрался.. На примере который входит в состав ExpressDBTree..
Автор: brookson
Дата сообщения: 24.02.2009 10:32
vladman
Удалил грид. Начал с нуля. Всё заработало. Видимо в процессе и правда что-то где-то поменял.
Спасибо.
Автор: shulum
Дата сообщения: 24.02.2009 18:15
Никто не подскажет - есть ли какая-то возможность при нажатии на dxBarButton определить нажата клавиша CTRL или нет?
Автор: vladman
Дата сообщения: 24.02.2009 18:55
shulum

Цитата:
Никто не подскажет - есть ли какая-то возможность при нажатии на dxBarButton определить нажата клавиша CTRL или нет?



Код: procedure <YourFormType>.<YourButtonClick(Sender: TObject);
var
State : TKeyboardState;
begin
GetKeyboardState(State);
if (State[vk_Control] And 128) <> 0 then
ShowMessage('Ctrl was pressed!');
end;
Автор: shulum
Дата сообщения: 24.02.2009 20:59
vladman
то что надо, спасибо

Страницы: 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081

Предыдущая тема: Delphi: tcp клиент в потоке


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