22.08.2006, 08:47 | #1 |
Участник
|
Активация строк в Гриде
Вопрос вот в чем.
Есть грид и нужно сделать так, чтобы можно было изменять только последнюю строку, в противном случае свойство датасорса Allowedit становилось False. Как сделать проверку является ли данная строка последней или нет. (Метод last перевоит на последнюю строку, что не позволяется переходить на другие строки грида) |
|
22.08.2006, 08:57 | #2 |
Участник
|
А если пользователь пересортирует записи, правило "последняя" сохраняется? Независимо ни от чего последняя?
С уважением, itfs. |
|
22.08.2006, 08:57 | #3 |
сибиряк
|
Цитата:
Сообщение от IvanS
Вопрос вот в чем.
Есть грид и нужно сделать так, чтобы можно было изменять только последнюю строку, в противном случае свойство датасорса Allowedit становилось False. Как сделать проверку является ли данная строка последней или нет. (Метод last перевоит на последнюю строку, что не позволяется переходить на другие строки грида) А вообще, навскидку, в методе active источника данных брать экземпляр query, пробежав по нему узнать "последний" RecId, ну и в зависимости от этого управлять уже allowEdit. Хотя, по-моему, с постановкой что-то напутано
__________________
С уважением, Вячеслав. Последний раз редактировалось slava; 22.08.2006 в 09:01. |
|
22.08.2006, 09:02 | #4 |
Участник
|
Этот момент про последнюю запись я уже продумал и поставил сортировку по дате.
Но вопрос ведь не в этом, а как проверить последняя она в гриде или нет??? |
|
22.08.2006, 09:08 | #5 |
Участник
|
А может быть это можно сделать через Select?
|
|
22.08.2006, 09:08 | #6 |
сибиряк
|
Цитата:
Сообщение от IvanS
Этот момент про последнюю запись я уже продумал и поставил сортировку по дате.
__________________
С уважением, Вячеслав. |
|
22.08.2006, 09:08 | #7 |
Участник
|
То, что предложил Slava, но с небольшим изменением
Брать QueryRun().Query(), менять сортировку на обратную: первая запись - то что вам надо. PS Что бы это работало необходимо присутствие сортировки в явном виде в исходном запросе. Иначе предсказать подрядок возвращаемых данных невозможно и придется фетчить весь исходный Query
__________________
Axapta v.3.0 sp5 kr2 Последний раз редактировалось AndyD; 22.08.2006 в 09:12. |
|
22.08.2006, 09:09 | #8 |
сибиряк
|
Цитата:
Сообщение от IvanS
А может быть это можно сделать через Select?
__________________
С уважением, Вячеслав. |
|
22.08.2006, 09:12 | #9 |
сибиряк
|
Цитата:
Сообщение от AndyD
То, что предложил Slava, но с небольшим изменением
Брать QueryRun().Query(), менять сортировку на обратную: первая запись - то что вам надо.
__________________
С уважением, Вячеслав. |
|
22.08.2006, 09:29 | #10 |
Участник
|
Цитата:
Сообщение от AndyD
PS Что бы это работало необходимо присутствие сортировки в явном виде в исходном запросе. Иначе предсказать подрядок возвращаемых данных невозможно и придется фетчить весь исходный Query
|
|
22.08.2006, 10:16 | #11 |
Участник
|
Может попробуйте в active код наподобие
if (YourDSName.RecId == YourDSName_ds.getLast().RecId) YourDSName.allowEdit(true); else YourDSName.allowEdit(false); Правда не проверял - но выглядит красиво |
|
22.08.2006, 10:26 | #12 |
Участник
|
А что это за метод такой getLast()? На датасоурсе есть только метод last(), но он ничего не возвращает
__________________
Axapta v.3.0 sp5 kr2 |
|
22.08.2006, 10:32 | #13 |
Участник
|
Oops. действительно, обшибся. Странно, getFirst и getNext есть, а getLast нету.
Ну, а что если тогда отсортировать данные в обратном порядке и дергать getFirst? |
|
22.08.2006, 12:50 | #14 |
Участник
|
Может сделать н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 |
Участник
|
RecId не обязательно у последней строки самый большой
А вот если в табличке есть LineNum и упорядочены строки в порядке его возростания, тогда да, по LineNum такое бы прокатило. |
|
22.08.2006, 13:09 | #16 |
Участник
|
Вообще-то как бы всякие там рейнжи могут быть на датасоурсе, сортировки могут быть с прямым и обратным порядком. Да и RecId отрицательные бывают
__________________
Axapta v.3.0 sp5 kr2 |
|
22.08.2006, 13:15 | #17 |
Участник
|
я на активе написал следующую вещь:
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 | #18 |
Участник
|
Вот на примере InventTable
__________________
Axapta v.3.0 sp5 kr2 |
|
22.08.2006, 13:52 | #19 |
Участник
|
У меня так и не получилось сделать через Квери, но селект, который создается этим запросов я использовал в активе и все заработало!!!
|
|
22.08.2006, 18:17 | #20 |
Участник
|
Цитата:
Сообщение от AndyD
Вообще-то как бы всякие там рейнжи могут быть на датасоурсе, сортировки могут быть с прямым и обратным порядком. Да и RecId отрицательные бывают
select firstonly recid from myTable order by myField desc Последний раз редактировалось DenNik; 22.08.2006 в 18:23. |
|