Сортировка gridview при привязке данных набора или списка объектов

Я думаю, что ваша проблема заключается в следующем:

data: {test_form},

, чтобы проверить, получаете ли вы какой-либо файл на стороне сервера, распечатайте вывод переменной файла:

echo var_dump(

Я думаю, что ваша проблема заключается в следующем:

[110]

, чтобы проверить, получаете ли вы какой-либо файл на стороне сервера, распечатайте вывод переменной файла:

[111]

и запишите вашего результата.

Но:

у меня есть другой скрипт для обработки всех элементов формы:

function ToAjax(form) { //target form
    var jsonObj = [];
    var formData = new FormData();
    //Form element
    $('[name="' + form + '"] *').not(':input[type=file], :input[type=button], :input[type=submit], :input[type=reset], :input[type=checkbox]:not(:checked)').filter(':input').each(function(obj, v) {
        var iObj = {};
        var input = $(this);
        var inputname = input.attr("name");
        if (typeof inputname !== typeof undefined && inputname !== false) { //handle attribute names
            inputname = inputname.replace(/-/g, '_'); //handle underscore
            var val = input.val();
            var inputval = val;
            iObj[inputname] = inputval;
            jsonObj.push(iObj);
        }
    });
    //Summernote textarea editor
    $('[name="' + form + '"] *').filter('div.sumertextarea').each(function(obj, v) {
        var iObj = {};
        var input = $(this);
        var inputname = input.attr("data-name");
        inputname = inputname.replace(/-/g, '_');
        var val = input.summernote('code');
        var inputval = val;
        iObj[inputname] = inputval;
        jsonObj.push(iObj);
    });
    //compres in json data
    jsonData = JSON.stringify(jsonObj);
    //parse json to formdata
    formData.append('jsonData', jsonData);
    //handle all file types input
    $('[name="' + form + '"] *').filter(':input[type=file]').each(function(obj, v) {
        if (typeof v.files[0] != 'undefined') {
            var file = v.files[0];
            var name = $(v).attr("name");
            name = name.replace(/-/g, '_');
            formData.append(name, file);
        }
    });
    //handle all File type from dropzone plugin
    $('[name="' + form + '"] *').filter('div.dropzone').each(function() {
        var DropFile = $(this)[0].dropzone.getAcceptedFiles();
        for (Nof in DropFile) {
            var file = DropFile[Nof];
            var name = DropFile[Nof].name;
            name = name.replace(/-/g, '_');
            formData.append(name, file);
        }
    });
    //send all data packet to send ajax function.
    window.SendAjax(formData);
}

для отправки на серверную часть я использую это:

function SendAjax(formdata) {
    var url = 'index.php';
    $.ajax({
        url: url,
        data: formdata,
        contentType: false,
        processData: false,
        type: 'POST',
        cache: false,
        error: function(xhr, status, error) {
            console.log(error);
            alert(error);
        },
        success: function(resp) {
            console.log(resp);
            alert(resp);
        }
    });
}

и да, я использую contenType: false вместо contentType: 'multipart/form-data',

, потому что я могу более легко обрабатывать данные на стороне сервера, чтобы получить доступ к файлам, которые у вас есть 2 seccion file sistema или dropzone plugin проверьте разницу в массиве результатов и позаботьтесь об адаптации или используйте ее в своем проекте:

2 примера файла отправляют одновременно PDF и JPG этот выходной тест плагина $ _FILES для общей формы и плагина:

[ 114]

С плагином dropzone:

["test_jpg"]=>
  array(5) {
    ["name"]=>
    string(10) "prueba.jpg"
    ["type"]=>
    string(10) "image/jpeg"
    ["tmp_name"]=>
    string(24) "C  :\ xampp\tmp\phpDDC7.tmp"
    ["error"]=>
    int(0)
    ["size"]=>
    int(8984)
  }
  ["test_pdf"]=>
  array(5) {
    ["name"]=>
    string(10) "prueba.pdf"
    ["type"]=>
    string(15) "application/pdf"
    ["tmp_name"]=>
    string(24) "C  :\ xampp\tmp\phpDDC8.tmp"
    ["error"]=>
    int(0)
    ["size"]=>
    int(180572)
  }
FILES);

и запишите вашего результата.

Но:

у меня есть другой скрипт для обработки всех элементов формы:

function ToAjax(form) { //target form
    var jsonObj = [];
    var formData = new FormData();
    //Form element
    $('[name="' + form + '"] *').not(':input[type=file], :input[type=button], :input[type=submit], :input[type=reset], :input[type=checkbox]:not(:checked)').filter(':input').each(function(obj, v) {
        var iObj = {};
        var input = $(this);
        var inputname = input.attr("name");
        if (typeof inputname !== typeof undefined && inputname !== false) { //handle attribute names
            inputname = inputname.replace(/-/g, '_'); //handle underscore
            var val = input.val();
            var inputval = val;
            iObj[inputname] = inputval;
            jsonObj.push(iObj);
        }
    });
    //Summernote textarea editor
    $('[name="' + form + '"] *').filter('div.sumertextarea').each(function(obj, v) {
        var iObj = {};
        var input = $(this);
        var inputname = input.attr("data-name");
        inputname = inputname.replace(/-/g, '_');
        var val = input.summernote('code');
        var inputval = val;
        iObj[inputname] = inputval;
        jsonObj.push(iObj);
    });
    //compres in json data
    jsonData = JSON.stringify(jsonObj);
    //parse json to formdata
    formData.append('jsonData', jsonData);
    //handle all file types input
    $('[name="' + form + '"] *').filter(':input[type=file]').each(function(obj, v) {
        if (typeof v.files[0] != 'undefined') {
            var file = v.files[0];
            var name = $(v).attr("name");
            name = name.replace(/-/g, '_');
            formData.append(name, file);
        }
    });
    //handle all File type from dropzone plugin
    $('[name="' + form + '"] *').filter('div.dropzone').each(function() {
        var DropFile = $(this)[0].dropzone.getAcceptedFiles();
        for (Nof in DropFile) {
            var file = DropFile[Nof];
            var name = DropFile[Nof].name;
            name = name.replace(/-/g, '_');
            formData.append(name, file);
        }
    });
    //send all data packet to send ajax function.
    window.SendAjax(formData);
}

для отправки на серверную часть я использую это:

function SendAjax(formdata) {
    var url = 'index.php';
    $.ajax({
        url: url,
        data: formdata,
        contentType: false,
        processData: false,
        type: 'POST',
        cache: false,
        error: function(xhr, status, error) {
            console.log(error);
            alert(error);
        },
        success: function(resp) {
            console.log(resp);
            alert(resp);
        }
    });
}

и да, я использую contenType: false вместо contentType: 'multipart/form-data',

, потому что я могу более легко обрабатывать данные на стороне сервера, чтобы получить доступ к файлам, которые у вас есть 2 seccion file sistema или dropzone plugin проверьте разницу в массиве результатов и позаботьтесь об адаптации или используйте ее в своем проекте:

2 примера файла отправляют одновременно PDF и JPG этот выходной тест плагина $ _FILES для общей формы и плагина:

[ 114]

С плагином dropzone:

["test_jpg"]=>
  array(5) {
    ["name"]=>
    string(10) "prueba.jpg"
    ["type"]=>
    string(10) "image/jpeg"
    ["tmp_name"]=>
    string(24) "C  :\ xampp\tmp\phpDDC7.tmp"
    ["error"]=>
    int(0)
    ["size"]=>
    int(8984)
  }
  ["test_pdf"]=>
  array(5) {
    ["name"]=>
    string(10) "prueba.pdf"
    ["type"]=>
    string(15) "application/pdf"
    ["tmp_name"]=>
    string(24) "C  :\ xampp\tmp\phpDDC8.tmp"
    ["error"]=>
    int(0)
    ["size"]=>
    int(180572)
  }
13
задан Troy Alford 23 May 2013 в 17:03
поделиться

4 ответа

Спасибо за Ваши ответы на сортировке. Я обратился к LINQ, чтобы помочь отсортировать динамично. Так как сетка знает, отсортировать ли ASC или DESC, и какое поле, я использовал Выражение LINQ. Выражение выполнило сортировку, и затем я просто связал те результаты со своим gridview.

Я подозреваю, что метод jQuery был бы быстрее, и не потребует полной обратной передачи.

using System.Linq.Expressions;

public SortDirection GridViewSortDirection
{
    get
    {
        if (ViewState["sortDirection"] == null)
            ViewState["sortDirection"] = SortDirection.Ascending;

        return (SortDirection)ViewState["sortDirection"];
    }
    set { ViewState["sortDirection"] = value; }
}

protected void gridView_Sorting(object sender, GridViewSortEventArgs e)
{
    //re-run the query, use linq to sort the objects based on the arg.
    //perform a search using the constraints given 
    //you could have this saved in Session, rather than requerying your datastore
    List<T> myGridResults = PerfomSearch();


    if (myGridResults != null)
    {
        var param = Expression.Parameter(typeof(T), e.SortExpression);
        var sortExpression = Expression.Lambda<Func<T, object>>(Expression.Convert(Expression.Property(param, e.SortExpression), typeof(object)), param);


        if (GridViewSortDirection == SortDirection.Ascending)
        {
            myGridView.DataSource = myGridResults.AsQueryable<T>().OrderBy(sortExpression);
            GridViewSortDirection = SortDirection.Descending;
        }
        else
        {
            myGridView.DataSource = myGridResults.AsQueryable<T>().OrderByDescending(sortExpression);
            GridViewSortDirection = SortDirection.Ascending;
        };


        myGridView.DataBind();
    }
}
20
ответ дан 1 December 2019 в 21:25
поделиться

Вы могли записать Сравнивание для своих объектов:

private int CompareObject(YourObject object1, YourObject object2)
{
    int iReturnValue = 0;
    if ((object1 != null) && (object2 != null) &&
        (object1.SomeField != object2.SomeField))
    {
        iReturnValue = (object1.SomeField > object2.SomeField) ? 1 : -1;
    }
    return iReturnValue;
}

Затем, когда в Вашем событии сортировки просто передают в Сравнить функции в Вашу программу сортировки объектов (предполагающий, что у Вас есть что-то как Список).

// Your list of data from the session or viewstate or whereever you have it stored.
lstObjects.Sort(CompareObject);

У Вас теперь есть отсортированный список, поэтому просто снова переплетают его.

1
ответ дан 1 December 2019 в 21:25
поделиться

Корректный - необходимо будет обработать onsorting, отсортировать список и снова переплести.

Кроме того, Вы могли посмотреть на обработку стороны клиента сортировки с помощью платформы JavaScript как jQuery.

2
ответ дан 1 December 2019 в 21:25
поделиться

Корректный, необходимо обработать событие OnSorting и установить свойство AllowSorting на истинный.

1
ответ дан 1 December 2019 в 21:25
поделиться
Другие вопросы по тегам:

Похожие вопросы: