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

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

Автор: kirdub
Дата сообщения: 21.01.2011 17:39
у View есть событие OnCustomDrawCell
Автор: kniazkinP
Дата сообщения: 21.01.2011 18:02
kirdub
Да, я видел! Но я так понял, что в его свойствах нету Column.Title.Caption и cxGrid1.Canvas.TextOut/ Что с этим сделать можно? В идеале, мне надо чтобы мой первый стоблец был порядковым номером записи. Надеюсь я понятно объяснил Просто этот код хорошо работает на dbgrid
Автор: marser
Дата сообщения: 21.01.2011 18:13
kniazkinP
А зачем так изощренно? Cоздайте в DataSet вычисляемое поле (тип Integer), например FieldNum. В обработчике события OnCalcFields напишите FieldNum.Value := DataSet.RecNo и показываете это поле в гриде.

Добавлено:
kniazkinP
в параметрах OnCustomDrawCell есть вся необходимая Вам информация.

Цитата:
Что с этим сделать можно?
Изучать.
Автор: kniazkinP
Дата сообщения: 21.01.2011 18:28

Цитата:
В обработчике события OnCalcFields напишите FieldNum.Value := DataSet.RecNo и показываете это поле в гриде.

Сделал! Но при удалении записи с помощью navigatora, запись как бы не удаляется, а нумерация продолжается... Допустим было 1,2,3 удалил 3, а следующая строка стала 4ой..
Я так поняло надо использовать свойство FullRefresh. Правильно? У какого объекта оно?
Автор: marser
Дата сообщения: 21.01.2011 18:44
kniazkinP

Цитата:
Я так поняло надо использовать свойство FullRefresh. Правильно? У какого объекта оно?

DataSet.Refresh или cxGridDBTableView.DataController.Refresh. Только у меня такое ощущение что у Вас подход неправельный. Зачем нужно выводить номер записи в DataSet? Какую информацию он несёт?

Добавлено:
kniazkinP
Или вы хотите что бы строчки в гриде были пронумерованы? Тогда причем тут номер записи в DataSet?
Автор: kniazkinP
Дата сообщения: 21.01.2011 18:52
По сути никакую информацию он не несет. Хотя объясню подробнее. Есть 39 маленьких баз, которые одинкаовы, но внутри них информация разная. Соответственно их заполняют. Тут вопрос - либо в ручную вводят номер строки или автоматом. А потом эти 39 баз я складываю в одну с помощью запроса
Код: with Query1 do
begin
SQL.Clear;
SQL.Add('insert into OtchetT select * from tch1.DB');
ExecSQL;

SQL.Clear;
SQL.Add('insert into OtchetT select * from tch3.DB');
ExecSQL;
Автор: marser
Дата сообщения: 21.01.2011 19:46
kniazkinP
И в схGridDBTableView Вы выводите таблицу OtchetT и хотите, чтобы строчки были последовательно пронумерованы? Я правельно понял?
Автор: kniazkinP
Дата сообщения: 21.01.2011 19:50
Да! Чтобы и в каждой базе tch1.DB, tch3.DB.. и в таблице OtchetT были верно пронумерованные порядковые номера! Стоит пятым по счёту и пусть имеет такой номер 5. И не важно что он там где-то стоял 1 или 18..
Автор: marser
Дата сообщения: 21.01.2011 20:03
kniazkinP
А какой смысл в этом номере? Что с ним потом делают? И в каком режиме Вы планируете использовать грид. Как обычный DBGrid или по полной программе (с сортировкой, группировкой, панель итогов, фильтр). И что при этом должно происходить с номерами?
Автор: kniazkinP
Дата сообщения: 21.01.2011 20:07
Смысла я особого в этом номере не вижу. cxGrid буду использовать с сортировкой, фильтром. А номера я так думаю должны оставаться..
Автор: marser
Дата сообщения: 21.01.2011 20:26
kniazkinP

Цитата:
А номера я так думаю должны оставаться

Т.е перенумерация не нужна. Ну тогда через вычисляемое поле DataSet или через OnCustomDrawCell.

Цитата:
Смысла я особого в этом номере не вижу

Поэтому я и насторожился - нестандартное желание. По-моему, бессмысленное усложнение программы.

Добавлено:
kniazkinP
Только если через OnCustomDrawCell, ни о какой сортировки, групперовки, фильтрации по этой колонке речи быть не может.
Можно еще попробовать через событие колонки OnGetDisplayText
Автор: kniazkinP
Дата сообщения: 21.01.2011 20:44

Цитата:
Т.е перенумерация не нужна. Ну тогда через вычисляемое поле DataSet или через OnCustomDrawCell.

Как это сделать? Я сделал вот так -
Код: procedure TStrukturnPodrazdel.Button2Click(Sender: TObject);
begin
table1.Refresh;
cxGrid1DBTableView1.DataController.Refresh;
end;
Автор: vladman
Дата сообщения: 21.01.2011 21:44
kniazkinP
marser
Во дискуссию развили. Все давно украдено (читай придумано)
до нас. А может и для нас
Автор: marser
Дата сообщения: 21.01.2011 22:01
kniazkinP
table1.Refresh и cxGrid1DBTableView1.DataController.Refresh это одно и тоже.
Метод cxGrid1DBTableView1.DataController.Refresh вызывает table1.Refresh.

Цитата:
Но когда запись удаляешь и создаешь новую, индекс становится не верным.

После удаления или вставки вызов table1.Refresh не помогает? Ну незнаю, попробуйте DataSet.Close и DataSet.Closе, или DataSet.Requery (если используете ADO). Да и неправельно это, каждый раз делать запрос к базе данных ради какой-то нумерации. Обращию внимание, что после сортировки в гриде порядок показа строк, естественно, не будет совпадать порядком следования записей в DataSet.
Автор: kniazkinP
Дата сообщения: 21.01.2011 22:03

Цитата:
vladman

Спасибо Вам огромное преогромное и разработчикам тоже!!!

Добавлено:
А как сделать чтобы начиналось не с нуля, а с 1? Тоже чтобы было как у людей
Автор: marser
Дата сообщения: 21.01.2011 22:34
kniazkinP

Цитата:
А как сделать чтобы начиналось не с нуля, а с 1

Код: AText := IntToStr(Sender.GridView.DataController.GetRowIndexByRecordIndex(ARecordIndex, false) + 1);
Автор: kniazkinP
Дата сообщения: 22.01.2011 11:55
Сделал в cxgrid таблицу, в один столбец добавил ComboBox. В него вписал два значения. Как сделать чтобы можно было только выбирать эти значения но самому вводить другие нельзя?
Автор: tatbesidovska
Дата сообщения: 22.01.2011 12:01
Добрый день! Может кто знает,как сделать.

Нужно реализовать такую беду: Есть GridView, GridControl Devexpress овский, при нажатии на ячейку, открывается диалоговое окно с выбором файла, выбираем файл, предположим .xls (пользователь может выбрать может любой файл любого типа), закрывается окно, ссылка на этот файл попадает в ячейку, ну и соответственно затем сохраняется в базу данных SQL. Подскажите что-нить, и еще, в базе для этого поля тип данных какой должен быть? Спасибо
Автор: Chukotka
Дата сообщения: 22.01.2011 12:07

Цитата:
в один столбец добавил ComboBox. В него вписал два значения. Как сделать чтобы можно было только выбирать эти значения но самому вводить другие нельзя?

Properties.DropDownListStyle := lsFixedList
Автор: tanaseduard
Дата сообщения: 22.01.2011 12:10
tatbesidovska
Тип поля в БД Varchar.
Для столбцы выставляешь Properties -> ButtonEdit.
При нажатии вызываешь диалог выбора файла, после сохраняешь в датасет.
Автор: kniazkinP
Дата сообщения: 22.01.2011 12:11
Chukotka Спасибо, большое! Форум отличный и люди на нём тоже!
Автор: tatbesidovska
Дата сообщения: 22.01.2011 12:13
tanaseduard, спасибо, буду пробовать

Добавлено:
tanaseduard, а примерчика нет случайно?
Автор: tanaseduard
Дата сообщения: 22.01.2011 12:49
tatbesidovska
Какая БД? Какие компоненты доступа?
Автор: tatbesidovska
Дата сообщения: 22.01.2011 12:52
tanaseduard,База SQL, доступ к данным через TableAdapter
Автор: tanaseduard
Дата сообщения: 22.01.2011 13:04
tatbesidovska

Времени мало, иду на встречу, коротко по примеру.

На событие ячейки, OnButtonClick вешаете вызов OpenFileDialog.Execute.

If not OpenFileDialog.Execute then exit;
GridView.DataController.SetValue(ARecordIndex,AColumn.Index,OpenFileDialog.FileName);

Индекс строки получаете при вызове ивента, индекс ячейки получаете из Column.Index. Ну и собственно пишете туда значение из диалога.
Автор: marser
Дата сообщения: 22.01.2011 13:44
tatbesidovska

Код: procedure TForm1.cxGrid1TableView1Column1PropertiesButtonClick(Sender: TObject; AButtonIndex: Integer);
begin
if OpenFileDialog.Execute then
TcxButtonEdit(Sender).EditValue := OpenFileDialog.FileName;
end;
Автор: tatbesidovska
Дата сообщения: 22.01.2011 18:21
marser, а на С# как это будет выглядеть?

procedure TForm1.cxGrid1TableView1Column1PropertiesButtonClick(Sender: TObject; AButtonIndex: Integer);
begin
if OpenFileDialog.Execute then
TcxButtonEdit(Sender).EditValue := OpenFileDialog.FileName;
end;
Автор: X11
Дата сообщения: 23.01.2011 15:09
Я динамически в цикле создаю строки в cxVerticalGrid.


Код:
TcxCustomRow(cxEditorRow) := fVerticalGrid.Add(TcxEditorRow);
cxEditorRow.Properties.Caption := fAddTable.FBN('FIELD_CAPTION').AsString;
cxEditorRow.Properties.EditPropertiesClass := GetEditProperties(fAddTable.FBN('EDITPROPERTIES').AsString);
cxEditorRow.Properties.DataBinding.ValueType := fAddTable.FBN('FIELD_DELPHI_TYPE').AsString;
SetProperties(cxEditorRow);

Автор: CupperJJ
Дата сообщения: 23.01.2011 17:52
подскажите пожалуйста как в отчеты DexExpress можно перенести текст в html разметки с сохранением форматирования ??? Есть ли для этого специальный компоненты ???
Автор: X11
Дата сообщения: 23.01.2011 17:59
А разве в DexExpress есть генератор отчётов?

Страницы: 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211

Предыдущая тема: Помогите пожалуйста с блокировкой клавиатуры и мышки


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