После того, как пользователь изменит макет столбца, вы можете получить colModel из сетки, выполнить итерацию по ней и поместить конфигурацию в массив объектов json, которые затем будут отправлены на сервер. Следующий код делает это:
function saveColumnConfiguration(grid, url) {
if (url.length > 0) {
var colArray = new Array();
var colModel = grid[0].p.colModel;
for (var i = 0; i < colModel.length; i++) {
if (colModel[i].name != "rn" && colModel[i].name != "cb") {
colArray.push({
Name: colModel[i].name,
Width: colModel[i].width,
Visible: !colModel[i].hidden
});
}
}
$.ajax({
url: url,
type: 'POST',
data: 'columnConfiguration=' + JSON.stringify(colArray)
});
}
}
Проверка на «rn» и «cb» означает, что столбцы rownumber и checkbox не берутся.
ОБНОВЛЕНИЕ
Вам понадобится класс для представления столбцов:
[Serializable]
public class JqGridColumn
{
public string Name { get; set; }
public int Width { get; set; }
public bool Visible { get; set; }
}
Вам также понадобится настраиваемое связывание модели для десериализации входящего списка:
public class JqGridConfigurationModelBinder : IModelBinder
{
public object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext)
{
var conf = bindingContext.ValueProvider.GetValue("columnConfiguration").AttemptedValue;
JavaScriptSerializer serializer = new JavaScriptSerializer();
var configuration = serializer.Deserialize<IEnumerable<JqGridColumn>>(conf);
return configuration;
}
}
Зарегистрируйте связыватель модели при запуске приложения:
ModelBinders.Binders.Add(typeof(IEnumerable<JqGridColumn>), new JqGridConfigurationModelBinder());
Действие в контроллере, обрабатывающем список, будет примерно таким:
public void SaveColumnConfiguration(IEnumerable<JqGridColumn> columnConfiguration)
{
// Save the list accordingly...
}
Обратите внимание, что порядок столбцов представлен их положением в списке. Затем вы можете легко прочитать эту конфигурацию и визуализировать сетку.
ОБНОВЛЕНИЕ 2
Функция в вашем случае должна называться так
saveColumnConfiguration($("#freight_bill"), "/Controller/Action");
Но нет после вызова columnChooser. Вы можете либо сделать другую кнопку для сохранения изменений, когда пользователь решит это сделать, либо обработать событие done
из средства выбора столбца следующим образом:
$("#freight_bill").jqGrid('columnChooser', {
done: function (perm) {
if (perm) {
$("#freight_bill").jqGrid("remapColumns", perm, true, false);
}
saveColumnConfiguration($("#freight_bill"), "/Controller/Action");
}
});
person
shizik
schedule
19.07.2011