у View есть событие OnCustomDrawCell
» Использование DevExpress (часть 4)
kirdub
Да, я видел! Но я так понял, что в его свойствах нету Column.Title.Caption и cxGrid1.Canvas.TextOut/ Что с этим сделать можно? В идеале, мне надо чтобы мой первый стоблец был порядковым номером записи. Надеюсь я понятно объяснил Просто этот код хорошо работает на dbgrid
Да, я видел! Но я так понял, что в его свойствах нету Column.Title.Caption и cxGrid1.Canvas.TextOut/ Что с этим сделать можно? В идеале, мне надо чтобы мой первый стоблец был порядковым номером записи. Надеюсь я понятно объяснил Просто этот код хорошо работает на dbgrid
kniazkinP
А зачем так изощренно? Cоздайте в DataSet вычисляемое поле (тип Integer), например FieldNum. В обработчике события OnCalcFields напишите FieldNum.Value := DataSet.RecNo и показываете это поле в гриде.
Добавлено:
kniazkinP
в параметрах OnCustomDrawCell есть вся необходимая Вам информация.
Цитата:
А зачем так изощренно? Cоздайте в DataSet вычисляемое поле (тип Integer), например FieldNum. В обработчике события OnCalcFields напишите FieldNum.Value := DataSet.RecNo и показываете это поле в гриде.
Добавлено:
kniazkinP
в параметрах OnCustomDrawCell есть вся необходимая Вам информация.
Цитата:
Что с этим сделать можно?Изучать.
Цитата:
В обработчике события OnCalcFields напишите FieldNum.Value := DataSet.RecNo и показываете это поле в гриде.
Сделал! Но при удалении записи с помощью navigatora, запись как бы не удаляется, а нумерация продолжается... Допустим было 1,2,3 удалил 3, а следующая строка стала 4ой..
Я так поняло надо использовать свойство FullRefresh. Правильно? У какого объекта оно?
kniazkinP
Цитата:
DataSet.Refresh или cxGridDBTableView.DataController.Refresh. Только у меня такое ощущение что у Вас подход неправельный. Зачем нужно выводить номер записи в DataSet? Какую информацию он несёт?
Добавлено:
kniazkinP
Или вы хотите что бы строчки в гриде были пронумерованы? Тогда причем тут номер записи в DataSet?
Цитата:
Я так поняло надо использовать свойство FullRefresh. Правильно? У какого объекта оно?
DataSet.Refresh или cxGridDBTableView.DataController.Refresh. Только у меня такое ощущение что у Вас подход неправельный. Зачем нужно выводить номер записи в DataSet? Какую информацию он несёт?
Добавлено:
kniazkinP
Или вы хотите что бы строчки в гриде были пронумерованы? Тогда причем тут номер записи в DataSet?
По сути никакую информацию он не несет. Хотя объясню подробнее. Есть 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;
Код: 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;
kniazkinP
И в схGridDBTableView Вы выводите таблицу OtchetT и хотите, чтобы строчки были последовательно пронумерованы? Я правельно понял?
И в схGridDBTableView Вы выводите таблицу OtchetT и хотите, чтобы строчки были последовательно пронумерованы? Я правельно понял?
Да! Чтобы и в каждой базе tch1.DB, tch3.DB.. и в таблице OtchetT были верно пронумерованные порядковые номера! Стоит пятым по счёту и пусть имеет такой номер 5. И не важно что он там где-то стоял 1 или 18..
kniazkinP
А какой смысл в этом номере? Что с ним потом делают? И в каком режиме Вы планируете использовать грид. Как обычный DBGrid или по полной программе (с сортировкой, группировкой, панель итогов, фильтр). И что при этом должно происходить с номерами?
А какой смысл в этом номере? Что с ним потом делают? И в каком режиме Вы планируете использовать грид. Как обычный DBGrid или по полной программе (с сортировкой, группировкой, панель итогов, фильтр). И что при этом должно происходить с номерами?
Смысла я особого в этом номере не вижу. cxGrid буду использовать с сортировкой, фильтром. А номера я так думаю должны оставаться..
kniazkinP
Цитата:
Т.е перенумерация не нужна. Ну тогда через вычисляемое поле DataSet или через OnCustomDrawCell.
Цитата:
Поэтому я и насторожился - нестандартное желание. По-моему, бессмысленное усложнение программы.
Добавлено:
kniazkinP
Только если через OnCustomDrawCell, ни о какой сортировки, групперовки, фильтрации по этой колонке речи быть не может.
Можно еще попробовать через событие колонки OnGetDisplayText
Цитата:
А номера я так думаю должны оставаться
Т.е перенумерация не нужна. Ну тогда через вычисляемое поле DataSet или через OnCustomDrawCell.
Цитата:
Смысла я особого в этом номере не вижу
Поэтому я и насторожился - нестандартное желание. По-моему, бессмысленное усложнение программы.
Добавлено:
kniazkinP
Только если через OnCustomDrawCell, ни о какой сортировки, групперовки, фильтрации по этой колонке речи быть не может.
Можно еще попробовать через событие колонки OnGetDisplayText
Цитата:
Т.е перенумерация не нужна. Ну тогда через вычисляемое поле DataSet или через OnCustomDrawCell.
Как это сделать? Я сделал вот так -
Код: procedure TStrukturnPodrazdel.Button2Click(Sender: TObject);
begin
table1.Refresh;
cxGrid1DBTableView1.DataController.Refresh;
end;
kniazkinP
marser
Во дискуссию развили. Все давно украдено (читай придумано)
до нас. А может и для нас
marser
Во дискуссию развили. Все давно украдено (читай придумано)
до нас. А может и для нас
kniazkinP
table1.Refresh и cxGrid1DBTableView1.DataController.Refresh это одно и тоже.
Метод cxGrid1DBTableView1.DataController.Refresh вызывает table1.Refresh.
Цитата:
После удаления или вставки вызов table1.Refresh не помогает? Ну незнаю, попробуйте DataSet.Close и DataSet.Closе, или DataSet.Requery (если используете ADO). Да и неправельно это, каждый раз делать запрос к базе данных ради какой-то нумерации. Обращию внимание, что после сортировки в гриде порядок показа строк, естественно, не будет совпадать порядком следования записей в DataSet.
table1.Refresh и cxGrid1DBTableView1.DataController.Refresh это одно и тоже.
Метод cxGrid1DBTableView1.DataController.Refresh вызывает table1.Refresh.
Цитата:
Но когда запись удаляешь и создаешь новую, индекс становится не верным.
После удаления или вставки вызов table1.Refresh не помогает? Ну незнаю, попробуйте DataSet.Close и DataSet.Closе, или DataSet.Requery (если используете ADO). Да и неправельно это, каждый раз делать запрос к базе данных ради какой-то нумерации. Обращию внимание, что после сортировки в гриде порядок показа строк, естественно, не будет совпадать порядком следования записей в DataSet.
Цитата:
vladman
Спасибо Вам огромное преогромное и разработчикам тоже!!!
Добавлено:
А как сделать чтобы начиналось не с нуля, а с 1? Тоже чтобы было как у людей
kniazkinP
Цитата:
Код: AText := IntToStr(Sender.GridView.DataController.GetRowIndexByRecordIndex(ARecordIndex, false) + 1);
Цитата:
А как сделать чтобы начиналось не с нуля, а с 1
Код: AText := IntToStr(Sender.GridView.DataController.GetRowIndexByRecordIndex(ARecordIndex, false) + 1);
Сделал в cxgrid таблицу, в один столбец добавил ComboBox. В него вписал два значения. Как сделать чтобы можно было только выбирать эти значения но самому вводить другие нельзя?
Добрый день! Может кто знает,как сделать.
Нужно реализовать такую беду: Есть GridView, GridControl Devexpress овский, при нажатии на ячейку, открывается диалоговое окно с выбором файла, выбираем файл, предположим .xls (пользователь может выбрать может любой файл любого типа), закрывается окно, ссылка на этот файл попадает в ячейку, ну и соответственно затем сохраняется в базу данных SQL. Подскажите что-нить, и еще, в базе для этого поля тип данных какой должен быть? Спасибо
Нужно реализовать такую беду: Есть GridView, GridControl Devexpress овский, при нажатии на ячейку, открывается диалоговое окно с выбором файла, выбираем файл, предположим .xls (пользователь может выбрать может любой файл любого типа), закрывается окно, ссылка на этот файл попадает в ячейку, ну и соответственно затем сохраняется в базу данных SQL. Подскажите что-нить, и еще, в базе для этого поля тип данных какой должен быть? Спасибо
Цитата:
в один столбец добавил ComboBox. В него вписал два значения. Как сделать чтобы можно было только выбирать эти значения но самому вводить другие нельзя?
Properties.DropDownListStyle := lsFixedList
tatbesidovska
Тип поля в БД Varchar.
Для столбцы выставляешь Properties -> ButtonEdit.
При нажатии вызываешь диалог выбора файла, после сохраняешь в датасет.
Тип поля в БД Varchar.
Для столбцы выставляешь Properties -> ButtonEdit.
При нажатии вызываешь диалог выбора файла, после сохраняешь в датасет.
Chukotka Спасибо, большое! Форум отличный и люди на нём тоже!
tanaseduard, спасибо, буду пробовать
Добавлено:
tanaseduard, а примерчика нет случайно?
Добавлено:
tanaseduard, а примерчика нет случайно?
tatbesidovska
Какая БД? Какие компоненты доступа?
Какая БД? Какие компоненты доступа?
tanaseduard,База SQL, доступ к данным через TableAdapter
tatbesidovska
Времени мало, иду на встречу, коротко по примеру.
На событие ячейки, OnButtonClick вешаете вызов OpenFileDialog.Execute.
If not OpenFileDialog.Execute then exit;
GridView.DataController.SetValue(ARecordIndex,AColumn.Index,OpenFileDialog.FileName);
Индекс строки получаете при вызове ивента, индекс ячейки получаете из Column.Index. Ну и собственно пишете туда значение из диалога.
Времени мало, иду на встречу, коротко по примеру.
На событие ячейки, OnButtonClick вешаете вызов OpenFileDialog.Execute.
If not OpenFileDialog.Execute then exit;
GridView.DataController.SetValue(ARecordIndex,AColumn.Index,OpenFileDialog.FileName);
Индекс строки получаете при вызове ивента, индекс ячейки получаете из Column.Index. Ну и собственно пишете туда значение из диалога.
tatbesidovska
Код: procedure TForm1.cxGrid1TableView1Column1PropertiesButtonClick(Sender: TObject; AButtonIndex: Integer);
begin
if OpenFileDialog.Execute then
TcxButtonEdit(Sender).EditValue := OpenFileDialog.FileName;
end;
Код: procedure TForm1.cxGrid1TableView1Column1PropertiesButtonClick(Sender: TObject; AButtonIndex: Integer);
begin
if OpenFileDialog.Execute then
TcxButtonEdit(Sender).EditValue := OpenFileDialog.FileName;
end;
marser, а на С# как это будет выглядеть?
procedure TForm1.cxGrid1TableView1Column1PropertiesButtonClick(Sender: TObject; AButtonIndex: Integer);
begin
if OpenFileDialog.Execute then
TcxButtonEdit(Sender).EditValue := OpenFileDialog.FileName;
end;
procedure TForm1.cxGrid1TableView1Column1PropertiesButtonClick(Sender: TObject; AButtonIndex: Integer);
begin
if OpenFileDialog.Execute then
TcxButtonEdit(Sender).EditValue := OpenFileDialog.FileName;
end;
Я динамически в цикле создаю строки в 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);
Код:
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);
подскажите пожалуйста как в отчеты DexExpress можно перенести текст в html разметки с сохранением форматирования ??? Есть ли для этого специальный компоненты ???
А разве в DexExpress есть генератор отчётов?
Страницы: 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211
Предыдущая тема: Помогите пожалуйста с блокировкой клавиатуры и мышки
Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.