Как получить значения столбцов, используя columnchooser в JQGrid? - PullRequest
1 голос
/ 19 июля 2011

Добрый день!

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

Я использовал columnChooser, чтобы мой пользователь мог выбрать столбцы по умолчанию.

Моя проблема сейчас, как получить те столбцы, которые выбрал пользователь?
И как установить эти столбцы в качестве столбцов по умолчанию?

Может кто-нибудь помочь мне с этой проблемой.

Спасибо

Jason

1 Ответ

3 голосов
/ 19 июля 2011

После того как пользователь изменит макет столбца, вы можете получить 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.

UPDATE

Вам понадобится класс для представления столбцов:

[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");
        }
});
...