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

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

Автор: Cryogen2003
Дата сообщения: 16.03.2010 13:11
vladman
Ну наверное, не знаю. Просто правиться это двумя строчками, причем легкими. Ну вообщем ладно, буду ждать. Раз такое уже висит давно
Автор: dusshes
Дата сообщения: 16.03.2010 22:18
Привет!

Вывожу на страницу:
<dxwgv:ASPxGridView ID="ASPxGridView1" ClientInstanceName="GrVi" ...
...
<dxwgv:GridViewDataTextColumn Caption="В работе" FieldName="DateInWork" ReadOnly="True"
VisibleIndex="7">
<DataItemTemplate>
<div style="width: 100%; height: 100%">
<dxe:ASPxLabel ID="ASPxLabel9" runat="server" Text='<%# Eval("DateInWork") %>'>
</dxe:ASPxLabel>
<dxe:ASPxButton ID="ASPxButton2" runat="server" CssFilePath="~/App_Themes/Office2003 Blue/{0}/styles.css"
CssPostfix="Office2003_Blue" Font-Size="XX-Small"
Text="Принять" AutoPostBack="False">
<ClientSideEvents Click="function(s, e) {
    GrVi.PerformCallback(GrVi.GetFocusedRowIndex());
}" />
</dxe:ASPxButton>
</div>
</DataItemTemplate>
<CellStyle HorizontalAlign="Center">
</CellStyle>
</dxwgv:GridViewDataTextColumn>
...

в обработчике:
protected void ASPxGridView1_CustomCallback(object sender, DevExpress.Web.ASPxGridView.ASPxGridViewCustomCallbackEventArgs e)
{
ASPxGridView1.Caption = e.Parameters;
}

Вроде все просто: в столбик ASPxGridа втроены кнопки, при нажатии на одну из них, в Captionе должен выводиься номер строки кнопки. Но правильно отрабатывает только в том случае если на момент нажатия кнопки была выбрана строка с этой кнопкой, а если выделена другая строка, то выдается ее номер. Визуално в момент нажатия на кнопку выделение строки перескакивает на нужную, но в обработчик засовывается старое значение, да и потом выделение строки возвращаатся назад, что тоже не гуд. Пробовал номер строки брать в самом обработчике так:
ASPxGridView1.Caption = ASPxGridView1.FocusedRowIndex;
но результат тотже.

Прошу помочь разобраться как в даной ситуации правильно передать номер строки в которой находится нажатая кнопка. Номер строки мне нужен именно в обработчике на сервере, Caption использую для напримера.

Спасибо, всем, кто поможет.
Автор: dusshes
Дата сообщения: 17.03.2010 09:30
В обработчике на клиенте как-то бы сначала сделать строку с кликнутой кнопкой выбранной и проблема бы решилась.
Автор: OwnerZ
Дата сообщения: 17.03.2010 09:38
Добрый день.

Подскажите возможно ли отображать в CxGrid дату в формате mmmm.yyyy месяц и год.

Спасибо
Автор: vladman
Дата сообщения: 17.03.2010 10:20
OwnerZ

Цитата:
Подскажите возможно ли отображать в CxGrid дату в формате mmmm.yyyy месяц и год.
Можно, но реализация зависит от того, хотите ли вы редактировать это значение в гриде, и если да, то в каком формате. Хотите ли вы, чтобы такой формат даты был для всего приложения (всех контролов приложения), либо только для конкретного грида и/или конкретного поля определенного грида.
Автор: X11
Дата сообщения: 17.03.2010 10:30
Я бы сделал это в настройках persistent-столбца в датасете.
Автор: OwnerZ
Дата сообщения: 17.03.2010 10:53

Цитата:
vladman



Нет мне надо просто отображать дату не как обычно день месяц год а в нужном формате. Дата будет редактироваться из редактора в гриде не будет доступа к записи ReadOnly.
Автор: dusshes
Дата сообщения: 17.03.2010 11:55
Как в ASPxGridView сделать на клиенте так, чтобы моя кнопка в столбце была видима только в FOCUSной строке.
Что бы при смене фокуса строки в старой строке они исчизали, а в выбранной появлялись.
Нужно на клиенте, без колбеков страницы.

Спасибо.
Автор: vladman
Дата сообщения: 17.03.2010 12:13
OwnerZ

Цитата:
Нет мне надо просто отображать дату не как обычно день месяц год а в нужном формате

Обработайте событие onGetDataTex вашего поля с датой если вы хотите чтобы сортировка и группировка учитывала отформатированное значение даты, иначе обрабатывайте событие OnGetDisplayText. Например:

Код: procedure <YourForm>.<YourcxGridDBTableViewDateField>GetDataText(Sender:
TcxCustomGridTableItem; ARecordIndex: Integer; var AText: string);
var
vDate: TDateTime;
begin
if TryStrToDate(AText, vDate) then
AText := FormatDateTime('mmmm.yyyy', vDate);
end;
Автор: OwnerZ
Дата сообщения: 17.03.2010 13:54
vladman


Большое спасибо.

Всё уяснил буду пытаться реализовать.

Добавлено:
vladman

Очень красиво всё получилось.


Автор: yurikorz
Дата сообщения: 17.03.2010 18:02
Привет всем!
Ребята, помогите в такой ситуации:
Делфи2007 + FIBPlus + DevExpress
Использую Grid с GridDBTableView, последний подключен к FIBDataSet
Проект в виде MDI, указанный выше грид находится на дочке, тоесть окон с гридами может быть много и они отображают (без редактирования) разную информацию в зависимости от запроса.
Все подключается к Базе Данных и все работает.

Теперь задача:
База Данных может редактироваться (другой программой), требуется обновлять Грид как можно чаще для отображения данных он-лайн.

Решение:
1. Поставил таймер и пробовал обновлять все датасеты по таймеру, но из-за сложных запросов и большого объема данных программа "подвисает" от 2 до 10 секунд в зависимости от кол-ва открытых окон.
2. Перевел открывание датасетов в потоки. Возник глюк: заметно обновление грида (мигает во время открытия) и когда курсор мыши находится над обновляемым в данный момент гридом выпадает исключение

Цитата:
Exception class EAccessViolation with message 'Access violation at address 00792CB2 in module 'x.exe'. Read of address 00000000'. Process x.exe (5108)


Автор: VadimLou
Дата сообщения: 17.03.2010 19:30
Боюсь что ваша реализация - нереентабельна...
cxGrid будет обновляться при каждом стороннем переоткрытии/изменении DataSet-а.
На небольших данных это может быть и приемлено, но на больших - тормозов не избежать.
В потоке имело бы смысл юзать DataSet-ы умеющие клонировать курсоры (TClientDataSet, kbMemTable). Обновлять так же имело бы смысл только новые/изменённые/удалённые записи. А для сего нужно логировать хотя бы изменения в табличках ... триггерами наверное...

Если все операторы в одной сети - можно попробовать и с помощью callback событий на уровне сервера БД сообщать об изменении конкретных записей в таблице.
Автор: vladman
Дата сообщения: 17.03.2010 19:55
yurikorz

Цитата:
Теперь задача:
База Данных может редактироваться (другой программой), требуется обновлять Грид как можно чаще для отображения данных он-лайн.

Посмотрите в сторону механизма Events в Firebird - www.firebirdsql.org/doc/whitepapers/events_paper.pdf, и их обработку в FIBPlus посредством компонента TSIBfibEventAlerter.

Добавлено:
VadimLou

Цитата:
Обновлять так же имело бы смысл только новые/изменённые/удалённые записи.

Обновлять можно только изменённые записи. Новые и удаленные, мне кажется, обновлять никак не получится ). Если воспользоваться механизмом ивэнтов, то в самом ивэнте можно указать какая операция произошла с той или иной записью и в какой таблице, и, соответственно, выполнять либо рэфрэшь нужной записи при апдэйте, либо фулрэфреш при инсерте и дэлите. При фулрефреше не лишним также будет обрамить его вызов в скобки Begin/EndUpdate.
Автор: VadimLou
Дата сообщения: 17.03.2010 20:46
Новые - Insert; Удалённые - Delete. Зачем FullRefresh ?
Автор: ChSerg
Дата сообщения: 17.03.2010 22:23
Столкнулся с такой проблемой.
В 2007-ом для TcxMaskEdit задавал EditMask = '[0-9]{2}[А-Яа-я]{2}'.
Все работало - в нужных позициях принимала русские буквы.
В 2010 не работает.
Как задать EditMask, чтобы вернуть потерянный функционал?
Автор: jonikDk
Дата сообщения: 17.03.2010 23:40
ChSerg
регулярные выражения ? а с английскими буквами работает ??
Автор: ChSerg
Дата сообщения: 17.03.2010 23:49
jonikDk

Ага. С англицкими всё гут!!!
Автор: vladman
Дата сообщения: 18.03.2010 00:50
VadimLou

Цитата:
Новые - Insert; Удалённые - Delete. Зачем FullRefresh ?

Это вы скорее всего имеет ввиду тот случай, когда для каждой физической таблицы необходимо создавать в *проекте в виде MDI* некоторые копии наборов данных из этих таблиц и соответственно отслеживать в них все изменения.
Но, если я правильно понял yurikorz, в этом *проекте в виде MDI* он опирается именно на выборки из таблиц в БД. В таком случае если в другом приложении выполнили инсерт - вы советуете выполнить инсерт еще раз? Тогда куда? Так же и с делит, откуда?

Добавлено:
ChSerg

Цитата:
Как задать EditMask, чтобы вернуть потерянный функционал?

Использовать 49 версию DevExpress, в которой как раз и был поправлен этот баг.
B152600 - The cxMaskEdit, that uses regular expression masks, incorrectly handles Unicode characters
Автор: yurikorz
Дата сообщения: 18.03.2010 12:06
Спасибо всем... буду пробовать крутить...

Цитата:
При фулрефреше не лишним также будет обрамить его вызов в скобки Begin/EndUpdate.

Подскажите еще такой момент, что лучше обрамлять в скобки Begin/EndUpdate.
Grid или GridDBTableView или DataController
да и ДатаКонтроллера есть еще BeginFullUpdate/EndFullUpdate чем он отличается от Begin/EndUpdate

Автор: Man_Without_Face
Дата сообщения: 18.03.2010 12:22
Сори не в ту ветку написал (отредактировал сообщение)
Автор: vladman
Дата сообщения: 18.03.2010 13:29
yurikorz

Цитата:
Подскажите еще такой момент, что лучше обрамлять в скобки Begin/EndUpdate.
Grid или GridDBTableView или DataController

GridDBTableView. Внутри этих скобок не происходит лишних перерисовок TableView.
Отличия BeginFullUpdate/EndFullUpdate от Begin/EndUpdate лучше прочитать в справке ms-help://borland.bds5/ExpressDataController.BDS5/ExpressDataController/IDH_TcxCustomDataController_BeginFullUpdate.htm
Автор: X11
Дата сообщения: 18.03.2010 14:01
Честно говоря, я тоже интересуюсь. Прочитал, не понял. Перевёл на русский - тоже не очень понятно
Автор: yurikorz
Дата сообщения: 18.03.2010 14:21
vladman, спасибо!

Цитата:
в справке ms-help://borland.bds5/ExpressDataController.BDS5/ExpressDataController/IDH_TcxCustomDataController_BeginFullUpdate.htm

а как прочитать? скопировал в браузер результат Ошибка
Автор: X11
Дата сообщения: 18.03.2010 14:27
Открой справку в D2007 и туда вставь (вверху есть строка адреса)

Автор: vladman
Дата сообщения: 19.03.2010 02:20
X11

Цитата:
Честно говоря, я тоже интересуюсь. Прочитал, не понял. Перевёл на русский - тоже не очень понятно

Обычно, в случаях неоднозначных/непонятных объяснений в справке, лучшим советчиком есть первоисточник, т.е. исходные коды, которые, в данном случае, более чем красноречивы

Код: procedure TcxCustomDataController.BeginFullUpdate;
begin
BeginUpdate;
end;

procedure TcxCustomDataController.EndFullUpdate;
begin
EndUpdate;
end;
///////////////////////
procedure TcxGridDBDataController.BeginFullUpdate;
begin
GridView.BeginUpdate;
inherited;
end;

procedure TcxGridDBDataController.EndFullUpdate;
begin
inherited;
GridView.EndUpdate;
end;
Автор: fortezza
Дата сообщения: 19.03.2010 15:25
Использую кдкд Zeos. ZQuery1.CachedUpdates := true.
Есть таблица с данными cxGrid1. При двойном щелчке появляется форма с cxDB-копонентами, в которых раскиданы значения активной записи.

Есть кнопка добавить, при нажатии добавляется новая запись и запускается форма. Заполняю форму, нажимаю ОК. Введенные данные отображаются в таблице.
Нажимаю кнопку Сохранить (ZQuery1.ApplyUpdates; ZQuery1.CommitUpdates;)
вылетает ошибка:

null value in column "ID" violates not-null constraint

Причем если не использовать форму, то все нормально, т.е. вводить данные напрямую в таблицу. К cxDBTextEdit1 прицеплен набор данных и поле "ID", но оно скрытое и ничего с ним не происходит. Если этот компонент убрать с формы - ошибка не уходит

Не могу разобраться из-за чего ошибка возникает и связано ли это с к-том cxDBTextEdit?

Добавлено:
простите. ошибка была не в компоненте

Добавлено:
есть таблица cxGrid. к одному из полей подключен cxLookUpComboBox.
можно получить доступ не к значению ячейки EditValue, а к тому, что подставляет cxLookUpComboBox, т. е. то что отображено в ячейке?
Автор: vladman
Дата сообщения: 20.03.2010 01:03
fortezza

Цитата:
есть таблица cxGrid. к одному из полей подключен cxLookUpComboBox.
можно получить доступ не к значению ячейки EditValue, а к тому, что подставляет cxLookUpComboBox, т. е. то что отображено в ячейке?

Можно, например так:

Код: with <YourcxGridDBTableView> do
ShowMessage(ViewData.Records[DataController.FocusedRowIndex].DisplayTexts[<YourcxGridDBTableViewLookupColumn.Index]);
Автор: AvGSoft
Дата сообщения: 20.03.2010 18:09
fortezza

Цитата:
null value in column "ID" violates not-null constraint

Было такое, если не указывалось ключевое поле для набора данных (но это для IBDAC+Firebird). Так что
Цитата:
cxDBTextEdit1
не виноват смотри на dataset-компонент.


Добавлено:
yurikorz
Есть старая статейка на Ссылка про обновление.
Автор: fortezza
Дата сообщения: 22.03.2010 08:19
Подскажите, что использовать. Есть маленький набор данных вида:
1 - рубль
2 - евро
3 - доллар

но ради него не хочу создавать отдельную таблицу и Query.

Но надо чтобы в ячейке при клике отображались три эти варианта, а по выбору подставлялся соответствующий ключ. Может быть можно как то это сделать с помощью cxComboBox, не подключая набор данных?
Автор: Granmer
Дата сообщения: 22.03.2010 10:00
fortezza

Цитата:
в ячейке

таблицы?

Цитата:
cxComboBox

у него есть свойство items, туда и вписать элементы

Страницы: 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211

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


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