В jqGrid вы можете редактировать несколько строк одновременно, а затем сделать один коммит? - PullRequest
9 голосов
/ 10 мая 2011

Мы используем функцию jQuery('#grid').editRow() в jqGrid, которая позволяет редактировать поля в строке.

Поддерживает ли jqGrid встроенное редактирование нескольких строк одновременно, где я могу вносить изменения в несколько строка затем отправить все сразу?

Мы стараемся избегать необходимости вносить изменения в каждую строку один за другим и каждый раз совершать отдельную «обратную передачу» на сервер для фиксации, для случаев, когда мы хотимМассовое редактирование ряда полей для ряда записей и с одним «коммитом».

Ответы [ 3 ]

8 голосов
/ 10 мая 2011

Встроенное редактирование нескольких строк не реализовано в jqGrid. Вы можете использовать локальное редактирование и публиковать все изменения на сервере вручную, но вам придется самостоятельно выполнить отправку всех изменений.

Лично я бы не реализовывал такое поведение в своих проектах. Причина в том, что я считаю, что веб-сайт всегда должен поддерживать параллелизм (оптимистичный параллелизм имеет больше смысла). В случае, если один человек пытается отправить изменения на сервер, сервер может ответить с ошибкой параллелизма: другой человек уже изменил данные. В случае, если данные сетки должны быть обновлены и редактирование строки должно быть повторено. Я вижу проблемы с реализацией редактирования нескольких строк в случае использования оптимистичного параллелизма. Как будут выглядеть сообщения об ошибках? Если много строк изменено, как должно выглядеть сообщение об ошибке? Что должен делать пользователь в случае ошибки? Должен ли он / она повторить полное изменение данных? Где выгода с точки зрения пользователей?

Передача редактирования одной строки была почти сразу во всех реализациях jqGrid, которые у меня были. Поэтому я не вижу необходимости делать несколько строк одновременно в проектах. Недостатки для пользователя в случае ошибок параллелизма больше, чем преимущества от сокращения «туда-обратно». Из-за очень хорошего соединения с сервером отправка данных не является проблемой в среде моих клиентов.

1 голос
/ 19 мая 2011

Я не очень хорошо знаю jqGrid, однако я сделал этот простой тест (я мог что-то упустить):

  1. Перейти на демонстрационную страницу jqGrid http://www.trirand.com/blog/jqgrid/jqgrid.html
  2. ЗагрузитьСтраница редактирования дороги / Базовый пример.
  3. Запустите этот код вручную:

    jQuery("#rowed1").jqGrid('editRow', '11');
    jQuery("#rowed1").jqGrid('editRow', '12');
    jQuery("#rowed1").jqGrid('editRow', '13')
    
  4. Отредактируйте три строки

  5. Запустите этот код вручную:

    jQuery("#rowed1").jqGrid('saveRow', '11');
    jQuery("#rowed1").jqGrid('saveRow', '12');
    jQuery("#rowed1").jqGrid('saveRow', '13');
    

Конечно, параметр url обязателен, и я думаю, что вы можете использовать опцию callback, чтобы собрать все отредактированные строки.

Надеюсь, это поможет

1 голос
/ 12 мая 2011

Встроенное редактирование нескольких строк невозможно в оригинальной реализации JQGrid.Что делает оригинальная реализация, так это то, что каждая строка, которую вы редактируете и теряете фокус, будет отправлена.

Вместо этого создайте пользовательскую реализацию, подобную этой: 1. Переопределите (расширите) существующий grid.inline.js и напишите свои собственные строки редактирования и сохраните строки.2. В функции редактирования строк настройте таким образом, чтобы добавить грязные строки (отредактированные) для сбора отдельно.3. В функции сохранения строк вы можете отправлять на сервер только грязные строки.

И для предотвращения одновременного обновления одних и тех же данных вы можете использовать механизм контроля версий одним из следующих способов: 1.Есть поле версии (скрытое) для всех строк.Когда строка становится грязной, увеличивайте поле версии.2. При отправке строк проверьте, существует ли номер версии и новый.Если есть несоответствие, сообщите пользователю / обновите существующее.(Это вы можете реализовать довольно легко)

Вот и все!Надеюсь, что это было полезно!: -)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...