AXForum  
Вернуться   AXForum > Microsoft Dynamics AX > DAX: Программирование
All
Забыли пароль?
Зарегистрироваться Правила Справка Пользователи Сообщения за день Поиск

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 22.08.2006, 08:47   #1  
IvanS is offline
IvanS
Участник
Аватар для IvanS
 
241 / 44 (2) +++
Регистрация: 30.06.2006
Адрес: Екатеринбург
Активация строк в Гриде
Вопрос вот в чем.
Есть грид и нужно сделать так, чтобы можно было изменять только последнюю строку, в противном случае свойство датасорса Allowedit становилось False.
Как сделать проверку является ли данная строка последней или нет. (Метод last перевоит на последнюю строку, что не позволяется переходить на другие строки грида)
Старый 22.08.2006, 08:57   #2  
itfs is offline
itfs
Участник
 
277 / 43 (2) +++
Регистрация: 18.07.2005
Адрес: Moscow
А если пользователь пересортирует записи, правило "последняя" сохраняется? Независимо ни от чего последняя?

С уважением, itfs.
Старый 22.08.2006, 08:57   #3  
slava is offline
slava
сибиряк
Самостоятельные клиенты AX
 
468 / 23 (1) +++
Регистрация: 28.12.2001
Адрес: Москва
Цитата:
Сообщение от IvanS
Вопрос вот в чем.
Есть грид и нужно сделать так, чтобы можно было изменять только последнюю строку, в противном случае свойство датасорса Allowedit становилось False.
Как сделать проверку является ли данная строка последней или нет. (Метод last перевоит на последнюю строку, что не позволяется переходить на другие строки грида)
А если пользователь "пересортировал" данные? Тогда какая строка последняя?

А вообще, навскидку, в методе active источника данных брать экземпляр query, пробежав по нему узнать "последний" RecId, ну и в зависимости от этого управлять уже allowEdit. Хотя, по-моему, с постановкой что-то напутано
__________________
С уважением, Вячеслав.

Последний раз редактировалось slava; 22.08.2006 в 09:01.
Старый 22.08.2006, 09:02   #4  
IvanS is offline
IvanS
Участник
Аватар для IvanS
 
241 / 44 (2) +++
Регистрация: 30.06.2006
Адрес: Екатеринбург
Этот момент про последнюю запись я уже продумал и поставил сортировку по дате.
Но вопрос ведь не в этом, а как проверить последняя она в гриде или нет???
Старый 22.08.2006, 09:08   #5  
slava is offline
slava
сибиряк
Самостоятельные клиенты AX
 
468 / 23 (1) +++
Регистрация: 28.12.2001
Адрес: Москва
Цитата:
Сообщение от IvanS
Этот момент про последнюю запись я уже продумал и поставил сортировку по дате.
А если пользователь ее изменит, или изменится индекс, или изменятся настройки сервера?
__________________
С уважением, Вячеслав.
Старый 22.08.2006, 09:08   #6  
IvanS is offline
IvanS
Участник
Аватар для IvanS
 
241 / 44 (2) +++
Регистрация: 30.06.2006
Адрес: Екатеринбург
А может быть это можно сделать через Select?
Старый 22.08.2006, 09:09   #7  
slava is offline
slava
сибиряк
Самостоятельные клиенты AX
 
468 / 23 (1) +++
Регистрация: 28.12.2001
Адрес: Москва
Цитата:
Сообщение от IvanS
А может быть это можно сделать через Select?
Селект не будет учитывать ranges, наложенные пользователем
__________________
С уважением, Вячеслав.
Старый 22.08.2006, 09:08   #8  
AndyD is offline
AndyD
Участник
КОРУС Консалтинг
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
 
2,560 / 2479 (88) +++++++++
Регистрация: 20.08.2005
То, что предложил Slava, но с небольшим изменением
Брать QueryRun().Query(), менять сортировку на обратную: первая запись - то что вам надо.

PS Что бы это работало необходимо присутствие сортировки в явном виде в исходном запросе. Иначе предсказать подрядок возвращаемых данных невозможно и придется фетчить весь исходный Query
__________________
Axapta v.3.0 sp5 kr2

Последний раз редактировалось AndyD; 22.08.2006 в 09:12.
Старый 22.08.2006, 09:12   #9  
slava is offline
slava
сибиряк
Самостоятельные клиенты AX
 
468 / 23 (1) +++
Регистрация: 28.12.2001
Адрес: Москва
Цитата:
Сообщение от AndyD
То, что предложил Slava, но с небольшим изменением
Брать QueryRun().Query(), менять сортировку на обратную: первая запись - то что вам надо.
Ну я это и имел ввиду Можно еще вызывать firstOnly для DataSource. Скорее всего быстрее должно быть.
__________________
С уважением, Вячеслав.
Старый 22.08.2006, 09:29   #10  
IvanS is offline
IvanS
Участник
Аватар для IvanS
 
241 / 44 (2) +++
Регистрация: 30.06.2006
Адрес: Екатеринбург
Цитата:
Сообщение от AndyD
PS Что бы это работало необходимо присутствие сортировки в явном виде в исходном запросе. Иначе предсказать подрядок возвращаемых данных невозможно и придется фетчить весь исходный Query
То есть нужно добавить сортировку в методе ExecuteQuery?
Старый 22.08.2006, 10:16   #11  
kashperuk is offline
kashperuk
Участник
Аватар для kashperuk
MCBMSS
Соотечественники
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,361 / 2084 (78) +++++++++
Регистрация: 30.05.2004
Адрес: Atlanta, GA, USA
Может попробуйте в active код наподобие

if (YourDSName.RecId == YourDSName_ds.getLast().RecId)
YourDSName.allowEdit(true);
else
YourDSName.allowEdit(false);

Правда не проверял - но выглядит красиво
Старый 22.08.2006, 10:26   #12  
AndyD is offline
AndyD
Участник
КОРУС Консалтинг
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
 
2,560 / 2479 (88) +++++++++
Регистрация: 20.08.2005
А что это за метод такой getLast()? На датасоурсе есть только метод last(), но он ничего не возвращает
__________________
Axapta v.3.0 sp5 kr2
Старый 22.08.2006, 10:32   #13  
kashperuk is offline
kashperuk
Участник
Аватар для kashperuk
MCBMSS
Соотечественники
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,361 / 2084 (78) +++++++++
Регистрация: 30.05.2004
Адрес: Atlanta, GA, USA
Oops. действительно, обшибся. Странно, getFirst и getNext есть, а getLast нету.

Ну, а что если тогда отсортировать данные в обратном порядке и дергать getFirst?
Старый 22.08.2006, 12:50   #14  
DenNik is offline
DenNik
Участник
 
62 / 9 (1) +
Регистрация: 24.05.2005
Может сделать нa executeQuery датасоураса вот так
select maxof(recid) from myTable

а на активе так
if (myTableDS.recId != myTable.recId)
myTableDS.allowEdit(false);
else
myTableDS.allowEdit(true);
Старый 22.08.2006, 13:01   #15  
kashperuk is offline
kashperuk
Участник
Аватар для kashperuk
MCBMSS
Соотечественники
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,361 / 2084 (78) +++++++++
Регистрация: 30.05.2004
Адрес: Atlanta, GA, USA
RecId не обязательно у последней строки самый большой
А вот если в табличке есть LineNum и упорядочены строки в порядке его возростания, тогда да, по LineNum такое бы прокатило.
Старый 22.08.2006, 13:09   #16  
AndyD is offline
AndyD
Участник
КОРУС Консалтинг
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
 
2,560 / 2479 (88) +++++++++
Регистрация: 20.08.2005
Вообще-то как бы всякие там рейнжи могут быть на датасоурсе, сортировки могут быть с прямым и обратным порядком. Да и RecId отрицательные бывают
__________________
Axapta v.3.0 sp5 kr2
Старый 22.08.2006, 18:17   #17  
DenNik is offline
DenNik
Участник
 
62 / 9 (1) +
Регистрация: 24.05.2005
Цитата:
Сообщение от AndyD
Вообще-то как бы всякие там рейнжи могут быть на датасоурсе, сортировки могут быть с прямым и обратным порядком. Да и RecId отрицательные бывают
А если довести запрос до такого?
select firstonly recid from myTable order by myField desc

Последний раз редактировалось DenNik; 22.08.2006 в 18:23.
Старый 22.08.2006, 13:15   #18  
IvanS is offline
IvanS
Участник
Аватар для IvanS
 
241 / 44 (2) +++
Регистрация: 30.06.2006
Адрес: Екатеринбург
я на активе написал следующую вещь:
public int active()
{
Query qr=new query();
queryBuildDataSource qrbd;
int ret;
RequestHistory reqh;
;

qrbd=qr.addDataSource(tablenum(Requesthistory));
qr.dataSourceNo(1).addSortField(fieldnum(RequestHistory,GivingDate),sortorder::Descending);
qr.dataSourceNo(1).addSortField(fieldnum(RequestHistory,GivingTime),sortorder::Descending);
qr.dataSourceNo(1).firstOnly(true);
this.queryRun().query(qr);
reqh= this.queryRun().get(tablenum(RequestHistory));
ret = super();
if (RequestHistory.RequestCodeHistory == reqh.RequestCodeHistory)
RequestHistory_ds.allowEdit(true);
else
RequestHistory_ds.allowEdit(false);
return ret;
}

В принципе все нормально, только я не могу запустить вот этот запрос, чтобы информация из таблица запроса помещалась в переменную reqh.
Мне кажется что запрос надо запускать не на this.queryrun... а как то по другому?
Старый 22.08.2006, 13:33   #19  
AndyD is offline
AndyD
Участник
КОРУС Консалтинг
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
 
2,560 / 2479 (88) +++++++++
Регистрация: 20.08.2005
Вот на примере InventTable
Вложения
Тип файла: xpo Form31.xpo (16.5 Кб, 465 просмотров)
__________________
Axapta v.3.0 sp5 kr2
Старый 22.08.2006, 13:52   #20  
IvanS is offline
IvanS
Участник
Аватар для IvanS
 
241 / 44 (2) +++
Регистрация: 30.06.2006
Адрес: Екатеринбург
У меня так и не получилось сделать через Квери, но селект, который создается этим запросов я использовал в активе и все заработало!!!
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Как программно узнать количество промаркированных строк в гриде? Jackally DAX: Программирование 12 24.12.2007 17:16
Тормозит копирование строк в буфер обмена ivas DAX: Программирование 20 21.08.2007 15:05
отображение состояния строк в гриде kashperuk DAX: Программирование 4 08.09.2005 16:54
Маркировка строк в гриде DreamCreator DAX: Программирование 8 09.06.2005 14:10
Как избежать автоматического появления строк в гриде shestakov DAX: Программирование 3 30.10.2003 20:37

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 05:59.