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

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

Автор: SIgor33
Дата сообщения: 25.09.2009 11:47
Подскажите почему TcxSpreadSheetBook не хочет открывать excel книгу пишет invalid data. в Книга имеются защищенные ячейки что по ошибке туда что нибуть не записали
Автор: X11
Дата сообщения: 25.09.2009 13:48
Есть связка firebird 2.0.5 <- fibplus 6.9.6 <-cxGrid x43

Добавляю в цикле записи в таблицу, добавляю записи НЕ через fibDataSet, а прямо в грид


Код: ForEachRow(false, FillFromSpr);

....
FillFromSpr(...)
begin
.....
dbgSyncSpr.DataController.Append;
dbgSyncSprID_SPR.EditValue := Values[ARowInfo.RecordIndex, dbgIdSprID.Index];
dbgSyncSpr.DataController.Post;
....
Автор: Cryogen2003
Дата сообщения: 25.09.2009 14:31
Итак, столкнулся кое с какой не поняткой при переходе с EhLib на DevExpress, а точнее при замене TDBLookupComboboxEh на TcxDBLookupComboBox.
Заменил стало быть компоненты, установил ListSource, ListFieldNames и KeyFieldNames. Запускаю стало быть проект, показывает мой список без проблем, но при это после выбора в списке чего-нибудь комбик складывается и пустота в нем. То есть сам список комбика показывается, но как бы ничего не выбирается. В чем собака зарылась?
Автор: vladman
Дата сообщения: 25.09.2009 15:06
X11

Цитата:
Проблема в том, что первые 100-150 записей добавляются сравнительно быстро, в вот потом... примерно 1 запись в секунду.
beginupdate использую

В ms-help://borland.bds5/ExpressDataController.BDS5/ExpressDataController/IDH_TcxCustomDataController_Append.htm указано:
Note: Do not call the Append method within the BeginUpdate/EndUpdate and BeginFullUpdate/EndFullUpdate blocks.



Добавлено:
Cryogen2003

Цитата:
То есть сам список комбика показывается, но как бы ничего не выбирается. В чем собака зарылась?

Вы не забыли установить свойства DataBinding.DataSource и DataBinding.DataField?
Автор: Cryogen2003
Дата сообщения: 25.09.2009 15:18
vladman
Дык и не устанавливал я эти поля. В EhLib все и так работало. ок, как сделать так, чтобы у меня все работало без проблем?
есть Table, в нем данные ListId и ListValue (ну то есть какие-то действия и стало быть их коды), надо дать пользователю выбирать ListValue, но в базу как-бы нуно сохранять ListId. Как сохранить я сам разберусь, но как сделать так, чтобы все работало. Table один, DataSource один, если и ListSource и в DataBinding.DataSource запихнуть мой DataSource, орет, что идет зацикливание.
Автор: rainebove
Дата сообщения: 25.09.2009 15:42
Здравствуйте только начал изучать компоненты DevExpress и столкнулся с такой проблемой, пытаюсь занести данные в cxGrid использую AdoConnection StoredProc DateSet. В StoredProc хранимка следующего содержания:

SELECT pd.PersonId, pd.DocText
FROM PersonDoc pd

в PersonDoc 3 разных записи

cxGrid2DBTableView1DBColumn1 -> properties =LookupComboBox, ListFieldName =DocText, KeyFieldNames =id, остальные свойства по дефолту
в результате выполнения в cxGrid заносится первая запись и повторяется 3 раза, хотя в фильтр->настроики (выпадающ список) выводятся все записи. Подскажите пожалуйста что не так?
Автор: X11
Дата сообщения: 25.09.2009 15:57
vladman, спасибище!!!
Изменил на
dbgSyncSpr.DataController.AppendRecord;
теперь летает. Ура!

Добавлено:
Летает-то летает. Только теперь после завершения цикла выполнения в базе только одна запись

Добавлено:
а в этом примере не очень-то и понял как добавлять правильно записи через грид в базу
ms-help://borland.bds5/ExpressDataController.BDS5/ExpressDataController/IDH_Example_TcxCustomDataSource_AppendRecord_InsertRecord.htm
Автор: vladman
Дата сообщения: 25.09.2009 16:15
Cryogen2003
Не совсем понятно что именно вы хотите сделать. Если хотите чтобы в некоторое поле таблицы А сохранялись не сами значения из таблицы B а их (значений) коды, а при визуализации данных таблицы А вы эти коды резолвите в соответствующие значения с помощью cxDBLookupComboBox, то совершенно справедливо "орет, что идет зацикливание" так как в вашем случае таблица А и таблица В это одна и та же таблица. Если вы хотите просто лукап, которые не сохраняет значения в таблицу, тогда используйте не DBAware версию лукапа - cxLookupComboBox .
Чтобы все работало - ListSource (это таблица В) оставляйте так как есть, а в DataBinding.DataSource укажите DataSource ссылающийся на другую таблицу (таблица А) и в DataBinding.DataField соответствующее поле из этой же таблицы А.
Автор: Cryogen2003
Дата сообщения: 25.09.2009 16:18
vladman
Да нет же, есть только таблица А, нужно чтоб показывалось поле B, а в базу записывалось поле C (код поля B). в лукапе EhLib такой фокус без проблем проходил
Автор: vladman
Дата сообщения: 25.09.2009 16:18
rainebove
А в сам cxGrid вы каким запросом выбираете данные?

Добавлено:
Cryogen2003

Цитата:
в лукапе EhLib такой фокус без проблем проходил

Не понимаю, к сожалению, что вы имеете ввиду. Давайте откомпилированный exe в котором это реализовано с помощью EhLib.
Автор: Cryogen2003
Дата сообщения: 25.09.2009 16:23
vladman
Ну я боюсь exe переслать не смогу, но может быть вы и правы и стоит просто отказаться в пользу обычного лукапа и писать ручками.


Добавлено:
vladman
Оказывается действительно, мне TcxLookupComboBox более подходит под мои нужды, большое спасибо.
Автор: X11
Дата сообщения: 25.09.2009 16:49
Как правильно?
Так:

Код:
dbgSyncSpr.DataController.AppendRecord;
RecIndex := dbgSyncSpr.DataController.RecordCount - 1;
dbgSyncSpr.DataController.Values[RecIndex, dbgSyncSprID_SPR.Index] := Values[ARowInfo.RecordIndex, dbgIdSprID.Index];
dbgSyncSpr.DataController.Values[RecIndex, dbgSyncSprID_IN_KVX.Index] := FBN('ID').AsInteger;
dbgSyncSpr.DataController.Values[RecIndex, dbgSyncSprVALUE_IN_KVX.Index] := FBN('name').AsString;
Автор: vladman
Дата сообщения: 25.09.2009 16:49
X11

Цитата:
а в этом примере не очень-то и понял как добавлять правильно записи через грид в базу

Этот пример вам не подходит, так как он для cxCustomDataSource, который "Represents a custom data source for a grid control." В случае с примером это TStringList.
И вообще "The AppendRecord method adds a new empty record to your data controller. You should use this method only in provider and unbound modes. If the data controller represents dataset data (TcxDBDataController), you should use the Append method instead." - ms-help://borland.bds5/ExpressDataController.BDS5/ExpressDataController/IDH_TcxCustomDataController_AppendRecord.htm

Добавлено:
Cryogen2003

Цитата:
Ну я боюсь exe переслать не смогу

Так и не нужен ваш большой проект. Сделайте новый проект с dxMemData как источник для Ehlib Lookup, чтобы проиллюстрировать что вы имеете ввиду.
Автор: X11
Дата сообщения: 25.09.2009 16:59

Цитата:
ms-help://borland.bds5/ExpressDataController.BDS5/ExpressDataController/IDH_TcxCustomDataController_AppendRecord.htm

Это я читал, всё получилось, записи добавляются мгновенно.

Интересует, как правильно
так?
dbgSyncSpr.DataController.AppendRecord;
RecIndex := dbgSyncSpr.DataController.RecordCount - 1;

или так?
RecIndex := dbgSyncSpr.DataController.AppendRecord;

Кстати OptionsData.AppendRecord должно быть в True

И ещё.
Решил добавлять запис напрямую в датасет. Прикол в том, что этот способ также начал тормозить примерно после 100-ой добавленной записи ))))
Наверное потому, что при вызове
pFibDataSet1.Append cxGrid тоже вызывает DatacontrollerAppend )))))

Пятница... уже туго соображаю. ><
Автор: Cryogen2003
Дата сообщения: 25.09.2009 17:00
vladman
Да я уже разобрался, мне действительно не нужно было в моей задачи с DBAware и TcxLookupComboBox умеет все тоже самое, что и компонент из EhLib. просто в EhLib сделано так, если устанавливаешь DataSource, то он автоматом устанавливает, если не устанавливаешь, он просто в KeyValue показывает и все. Мне как раз такой вариант устраивает. Просто думал, что TcxLookupComboBox не умеет работать с ListSource, но я ошибался и сейчас все уже сделал. Спасибо
Автор: vladman
Дата сообщения: 25.09.2009 17:07
X11

Цитата:
Летает-то летает. Только теперь после завершения цикла выполнения в базе только одна запись

Так данные в БД уже появляются?
RecIndex := dbgSyncSpr.DataController.AppendRecord; - так правильнее.

Цитата:
pFibDataSet1.Append cxGrid тоже вызывает DatacontrollerAppend

Нет, не вызывается.
У вас, скорее всего, датасет настроен на работу с транзакциями как AutoCommit.
Попробуйте все записи вставлять в рамках одной транзакции. 1000 записей вставятся меньше чем за секунду, правда, если у вас нет для этой таблицы сложных триггеров.
Автор: X11
Дата сообщения: 25.09.2009 17:09

Цитата:
Так данные в БД уже появляются?

На столько быстро, что я в шоке
Цитата:
Нет, не вызывается.
У вас, скорее всего, датасет настроен на работу с транзакциями как AutoCommit.
Попробуйте все записи вставлять в рамках одной транзакции. 1000 записей вставятся меньше чем за секунду, правда, если у вас нет для этой таблицы сложных триггеров.


Это я знаю. Так всегда и делаю.

Просто сейчас через грид и с автоподтверждением работает ну очень быстро О_о, может грид сам ка-то кеширует или вызывает Post через определённое кол-во записей.
Автор: rainebove
Дата сообщения: 25.09.2009 20:39
vladman

Цитата:
А в сам cxGrid вы каким запросом выбираете данные?

Никаким, выполняю хранимую процедуру.
StoredProc->Active = true

Автор: vladman
Дата сообщения: 26.09.2009 00:03
rainebove

Цитата:
Никаким, выполняю хранимую процедуру.

Так эта процедура дает данные для вашего грида, тогда не понятно зачем вам нужен в cxGrid2DBTableView1DBColumn1 -> properties =LookupComboBox, который ссылается на эту же процедуру. Давайте пример в исходных кодах, может мы о разном говорим.
Автор: gyani
Дата сообщения: 26.09.2009 10:40
Здравствуйте, подскажите можно ли сделать мигание текста в ячейке?
Автор: vladman
Дата сообщения: 26.09.2009 11:40
gyani

Цитата:
подскажите можно ли сделать мигание текста в ячейке?

Посмотрите в Knowledge Base статью и пример к ней. Как раз по вашему вопросу - Flashing cells
Автор: FunCode
Дата сообщения: 26.09.2009 14:20
Сегодня поставил последний DevExpress от feandy на Delphi 2010 и заметил такую вещь в Object Inspector в свойствах любого DevExpressовского компонента Style->AssignedValues вижу следующее:

Автор: gyani
Дата сообщения: 26.09.2009 18:46
vladman спасибо
Автор: xokc
Дата сообщения: 27.09.2009 12:30
FunCode
А куда именно смотреть-то?
Автор: FunCode
Дата сообщения: 27.09.2009 13:26
xokc

Цитата:
А куда именно смотреть-то?

в смысле куда смотреть ? я же привел скриншот на котором обозначена проблема,
интересно узнать как у кого на 2010 46 версия поставилась ?
Автор: rainebove
Дата сообщения: 28.09.2009 08:40
vladman

Цитата:
Так эта процедура дает данные для вашего грида, тогда не понятно зачем вам нужен в cxGrid2DBTableView1DBColumn1 -> properties =LookupComboBox, который ссылается на эту же процедуру. Давайте пример в исходных кодах, может мы о разном говорим.

Я просто незнаю как еще данные отобразить в гриде, у меня есть пример с работающим гридом там сделано так те через cxGrid2DBTableView1DBColumn1 -> properties =LookupComboBox. Пробовал тупо скопировать не работает.
В идеале нужно чтобы при нажатии на кнопку добавить, в навигаторе, в cxGrid появлялась новая строка с выпадающ списком (LookupComboBox) и в неи содержимое хранимки. Но пока вообще данные выбрать неполучается
Исходников нет все пока делал тока через интерфейс
Автор: vladman
Дата сообщения: 28.09.2009 09:13
rainebove

Цитата:
Я просто незнаю как еще данные отобразить в гриде

Попробуйте сначала добиться отображения/добавления данных в гриде без лукапа. Затем читайте в справке как добавить лукап в качестве InplaceEditor'а.
Автор: rainebove
Дата сообщения: 28.09.2009 09:45
vladman
Если не сложно подскажите какие своиства изменить
Я делаю так cxGrid2Level1 - DataSource =dsDoc (Tdatasource где dataset=spDoc)
cxGrid2Level1 - DataSet=spDoc (TADOSrtoredProc с хранимкой)
Link To DataSource = dsDoc
Автор: kii
Дата сообщения: 28.09.2009 10:47
Уважаемые!!!!

Кто-нибудь сталкивался с такой проблемой
В cxGrid'е даты:
02.02.2009
27.12.2006
- представлены КАК ПУСТОЕ ПОЛЕ ???????
Автор: vladman
Дата сообщения: 28.09.2009 10:48
rainebove

Цитата:
cxGrid2Level1 - DataSource =dsDoc

Где вы нашли у Level свойство DataSource и DataSet?
Нужно так - cxGrid2DBTableView1.DataController.DataSource = dsDoc,
а в dsDoc.Dataset = spDoc

Добавлено:
kii

Цитата:

Кто-нибудь сталкивался с такой проблемой

А что в этих датах такого особенного? Как представляются другие даты?

Страницы: 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081

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


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