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

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

Автор: raspe
Дата сообщения: 28.06.2007 11:36
Dennica
Ну а чего там прописывать. Можно каждому View на событие ShowGridMenu поставить одну функцию обработчик, зато и настройка более точная - каждому вью можно свое контекст меню настроить
Автор: saltmi1
Дата сообщения: 28.06.2007 12:57
Ошибка при обработке Float в TcxSpreadSheetBook
Столкнулся с неприятностью. Использую Access, ADO компоненты, TcxSpreadSheetBook. Данные из SpreadSheetBook заносятся в таблицу. Поле РЕЗУЛЬТАТ типа TFloatField.
Вписываю например 12,5, но в результате Grid отображает 12,500453453631231231 или что-то в этом роде. С целыми числами проблем нет.
Процедура считывания:

Код: FieldByName('RESULT').AsFloat :=
StrToFloat(cxSpreadBook.ActiveSheet.GetCellObject(2, 3).Text;
Автор: OXDBA
Дата сообщения: 28.06.2007 13:33
saltmi1
Неочевидные особенности вещественных чисел
Автор: Dronton2
Дата сообщения: 28.06.2007 13:54
Dennica
Там всё через код делается. Т.е. все настройки визуальных компонентов в итоге преобразуются в код, доступный для программера. Мне эта фича, честно говоря, тоже не нравится, но есть любители именно такого подхода.
Автор: saltmi1
Дата сообщения: 28.06.2007 15:01
OXDBA
Статья очень интересная. Думаю, что понял что происходит. Но не понял как с этим бороться. В статье пишется:
"Рецепты преодоления этих проблем я сознательно не излагаю"
Я бы и поискал сам решение, если бы знал в какую сторону надо двигаться. Какой нибудь конкретный пример преодоления этой проблемы очень бы помог.
А вообще интересно, что впервые сталкиваюсь с этим, хотя судя по статье должен был столкнуться давным-давно. Наверное автор прав, и ко мне подходит этот смайлик:
Или, все еще осознаю свою несостоятельность и прошу помощи.
Автор: raspe
Дата сообщения: 28.06.2007 15:22
saltmi1
Попробуй поиграться с форматом отображения. Или поставь маску на редактор колонки
Автор: Dronton2
Дата сообщения: 28.06.2007 15:58
saltmi1
На процедуру считывания можно накрутить ROUND, т.е. округление до нужного количества знаков после запятой.
Автор: OXDBA
Дата сообщения: 28.06.2007 16:14
saltmi1
Сначала необходимо ответить себе на вопросы
Что храним в этом поле? Значение целочисленное, с плавающей/фиксированной запятой(если да, то необходимая точность)?
После чего определяем тип поля в БД и правила форматирования значения при вводе/выводе.
Автор: saltmi1
Дата сообщения: 28.06.2007 16:47
raspe Dronton2 OXDBA
Спасибо за советы. Попробую всё. В таблице будут храниться данные медицинских тестов.

Добавлено:
raspe Dronton2 OXDBA
Я знаете товарищи подумал и решил, что этого мне никто не позволит, если я медицинскую дату начну округлять и конвертировать. Изменю поле на стринг. Тогда когда нужно будет число для формул, выведу его через SQL. А уж юзеру покажу только точные стринги которые он в базу ввел. Понял так, что Developer Express собирается добавить в SpreadSheetBook возможность утапливать в сетку контролы. Буду ждать и надеяться.
Если кого интересует, нашел вот такие примеры решения ппроблемы с вещественными числами:
----------------------

Код:
uses Math;
function Reject(num: Extended; col: integer): Extended;
var
divider: Extended;
begin
try
divider:=IntPower(10, col);
result:=Round(num*divider)/divider;
except
if col>0
then result:=num
else result:=0;
end;
end;
Автор: WebInc
Дата сообщения: 29.06.2007 01:13
Dennica
Спасибо, вчера не успел ответить - отрубили инет. Нашел эти два параграфа, никак не мог выйти на них через поиск.
raspe Примерно к такому выходу я ипришел
Dronton2 У меня есть офлайновская, но я наткнулся сначало на описание но подумал что это не то, оказалось очень даже то

Всем спасибо за помощь
Автор: OXDBA
Дата сообщения: 29.06.2007 15:05
saltmi1

Цитата:
Изменю поле на стринг.

Типы с фиксированной точкой в медицине совсем никак?
Автор: saltmi1
Дата сообщения: 30.06.2007 18:26
OXDBA
Я имел в виду, что если я ввожу в программу 1,54 то хочу точнос так и получить. Я извиняюсь если чего не пониманию. Но в любом случае сделаю так как решил - стрингами. В будующем можно конечно что-то другое попробовать.
Автор: X11
Дата сообщения: 02.07.2007 13:34
Ребяты, есть у кого примеры работы с VerticalGrid? Те, что в комлекте слабоваты. Вот например я созжал несколько Rows, одна из них типа combobox, как программно наполнить этот комбобокс, и как получить выбранное пользователем значение? Справка есть, но она для D2006, а у меня D2007. Может есть в инете справка в формате CHM?
Заранее благодарен.

Добавлено:
Код не компилируется


Код:
(rIs.Properties as TcxComboBoxProperties).Items.CommaText := '';
Автор: Dronton2
Дата сообщения: 02.07.2007 14:34
X11
Нужно:

Цитата:

(rIs.Properties.EditProperties as TcxComboBoxProperties).Items.CommaText := '';


В шапке есть ссылка, куда компоненты приходят на водопой. Там можно получить файлы *.hlp
Автор: X11
Дата сообщения: 02.07.2007 16:01
Код работает нормально

Код:
procedure TfmAddApart2.ToolButton1Click(Sender: TObject);
begin
(rIs.Properties.EditProperties as TcxComboBoxProperties).Items.Clear;
fibdsState.Open;
fibdsState.First;
while not fibdsState.Eof do begin
(rIs.Properties.EditProperties as TcxComboBoxProperties).Items.AddObject(fibdsState.FBN('NAME').AsString,
Pointer(fibdsState.FBN('ID').AsInteger) );
fibdsState.next;
end;
end;
Автор: Dronton2
Дата сообщения: 02.07.2007 16:09
X11
Смотря в какой момент нужно получить ID. Можно, например, использовать ris.Properties.Value, если этот ID указан в KeyFieldNames/
Автор: X11
Дата сообщения: 02.07.2007 16:16
у меня не LookupCombobox, а просто combobox, по нажатию кнопки нужно получить
Автор: Dennica
Дата сообщения: 03.07.2007 06:19
X11
TcxComboBoxProperties не содержит в предках TcxComboBox. Следовательно приравнивать эти два класса нельзя. Следовательно ожидать у одного всей функциональности другого - тоже. В твоем случае если тебе нужен именно индекс элемента, используй методы класса Tstrings.

Код: ShowMessage(IntToStr((cxVerticalGrid1EditorRow1.Properties.EditProperties as TcxComboBoxProperties).Items.IndexOf(VarToStr(cxVerticalGrid1EditorRow1.Properties.Value))));
Автор: X11
Дата сообщения: 03.07.2007 07:42
По поводу
Цитата:
.Items.IndexOf
, а если в комбобоксе 3 совершенно одинаковых значения?
Автор: Dennica
Дата сообщения: 03.07.2007 07:45
X11
а какая разница тогда какой индекс из трех ?
Автор: X11
Дата сообщения: 03.07.2007 07:51
Поверь, практика показала, что есть разница.
Я вот не понимаю, они придумали туда комбобокс впихнуть, а нормально значения получить не дали возможности
Автор: Dronton2
Дата сообщения: 03.07.2007 08:13
X11
Я согласен с Dennica. Комбобокс нужен для того, чтобы ограничить пользователя вариантами выбора текста (или упростить работу пользователя).
В твоем случае нужно использовать ImageComboBox. И необязательно к нему прикреплять картинки. Я сам его использую постоянно, и всегда без картинок. Там есть ID, Tag, типы значений. Это удобный и полезный редактор.
Автор: X11
Дата сообщения: 03.07.2007 08:36
сейчас мы их посмотрим, сайчас мы их сравним. Спасибище, парни.
Автор: X11
Дата сообщения: 03.07.2007 15:02
Dronton2, выручай, дружище, дай пару примеров добавления и извлечения данных
Автор: Dronton2
Дата сообщения: 03.07.2007 15:44
X11
Добавления куда и извлечения откуда? VerticalGrid? ImageComboBox.Items? Что-то другое?

На всякий случай, есть неплохая ссылка на саппорт центр.
Там часто объясняют с помощью примеров.
Автор: X11
Дата сообщения: 03.07.2007 15:49
Dronton2, да, именно, я создал в VerticalGrid несколько строк, некоторый типа TcxImageCombobox, туда нужно добавить данные в цикле по датасету, а потом при нажатии на кнопку извлечь ID, так сказать, выбранной пользователем записи.

Добавлено:

Цитата:
На всякий случай, есть неплохая ссылка на саппорт центр.

искал там, мало инфы

Добавлено:
или пример извлечения id из TcxLookupComboBoxProperties

Добавлено:
ну типа, как получить KeyValue выбранной строки?

Добавлено:
этот код не совсем правильный


Код:
fmMain.ShowMessageI((rState.Properties.EditProperties as TcxLookupComboBoxProperties).ListSource.DataSet.FieldByName('id').AsInteger );
Автор: drunk2
Дата сообщения: 04.07.2007 07:08
Надо выделить в гриде несколько записей. Например с id=1,4,5. Как?
Автор: saltmi1
Дата сообщения: 04.07.2007 09:05
Помогите понять как использовать MultiSelect в cxGrid.
Вроде все делаю правильно, а не работает.

Код:
var i: integer; bookmark : TBookmarkStr;
begin
for i := 0 to ClientView.controller.selectedrecordcount-1 do begin
bookmark := ClientView.datacontroller.getselectedbookmark(i);
ShowMessage(DM.ClientQ.FieldByName('FIRST_NAME').AsString);
end;
Автор: Dennica
Дата сообщения: 04.07.2007 09:09
drunk2
как вариант можно так:

Код: var
ARecordIndex: Integer;
...
with cxGrid1DBTableView1 do begin
ARecordIndex := DataController.FindRecordIndexByKey(1);
if ARecordIndex <> -1 then
ViewData.GetRecordByRecordIndex(ARecordIndex).Selected := True;
end;
Автор: Dronton2
Дата сообщения: 04.07.2007 09:24
saltmi1
Букмарк должен быть у датасета:

Код: DM.ClientQ.bookmark := ClientView.datacontroller.getselectedbookmark(i);

Страницы: 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182

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


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