Как отсортировать данные по убыванию в JsonResult?

у меня есть эта функция

public JsonResult GetStoreIndNo(string STranNo, string sStatus, string 
SToStore)
    {
        StoreMdClient smClient = new StoreMdClient();
        string StoreCode = ("" + HttpContext.Session["StoreCode"]).Trim();
        DataSet ds = new DataSet();
        if (sStatus == "N") ds.ReadXml(new XmlTextReader(new StringReader(smClient.GetStoreIndNoDataNew(SToStore, StoreCode, "", BL_GeneralFunctionsSUMDTLS.Summary))));
        else ds.ReadXml(new XmlTextReader(new StringReader(smClient.GetStoreIndNoDataDisply(STranNo, BL_GeneralFunctionsSUMDTLS.Summary))));

        DataTable load = new DataTable();
        if (ds.Tables.Count > 0) load = ds.Tables[0];
        var jsondata = new
        {
            rows = (from DataRow row in load.Rows
                    select new
                    {
                        id = ("" + row["INDENTNO"]).Trim(),
                        cell = new string[] { 
                            GeneralFunction.GetDate(("" + row["INDENTDATE"]).Trim()), ("" + row["INDENTNO"]).Trim()
                     }
        }).ToArray()
        };
        return Json(jsondata);
    }

Я получаю значение в ds.ReadXml, после чего, когда оно загружается в DataTable здесь, я хочу упорядочить или отсортировать строки в порядке убывания. Я получаю значения в двух столбцах следующим образом: -

1 24.04.2017 26SI170424PH0001

2 24.04.2017 26SI170424PH0002

3 24.04.2017 26SI170424PH0003

Я хочу отсортировать в порядке «убывания». По дате в первом столбце и с использованием последних 3 цифр второго столбца.

Кроме того, вот мой jQuery:

function StoreIndNoBind(condiA) {
        if (condiA == 'empty' || condiA == 'enablefill' || condiA == 'disablefill') {
            var FrmdateA = ""; var ToDateA = "";
            var sStatus = gact;
            var SToStore = ("" + $("#cmbToStoreSel").select2("val")).trim();
            if (condiA == 'empty') {
                STranNo = "";
                var urlq = "GetStoreIndNo?STranNo=" + STranNo + "&&sStatus=" + sStatus + "&&SToStore=" + SToStore;
            }
            else {
                STranNo = ("" + $("#txtTranNo").val()).trim();
                var urlq = "GetStoreIndNo?STranNo=" + STranNo + "&&Status=" + sStatus + "&&SToStore=" + SToStore;
            }
        }
        colnames = ['Indent Date', 'Indent Number'];
        $("#GridIndentNo").jqGrid('GridUnload');
        $("#GridIndentNo").clearGridData();
        $("#GridIndentNo").jqGrid({
            url: urlq,
            datatype: 'json',
            mtype: 'post',
            colNames: colnames,
            colModel: [
                { name: 'INDDATE', index: 'INDDATE', width: 93, editable: false },
                { name: 'INDENTNO', index: 'INDENTNO', width: 140, editable: false }
            ],
            sortname: 'id',
            sortorder: 'desc',
            shrinkToFit: false,
            hidegrid: false,
            gridView: true,
            rownumbers: true,
            loadonce: true,
            multiselect: true,
            sortableColumns: false,
            cellsubmit: 'clientArray',
            height: 110,
            width: 316,
            rowNum: 9999999999,
            ondblClickRow: true,
            loadtext: 'Loading.....',
            footerrow: false,
            gridComplete: function () {
                if (condiA != 'empty' && condiA != '') {
                    var ids = jQuery("#GridIndentNo").jqGrid('getDataIDs');
                    if (ids.length >= 0) {
                        for (var i = 0; i < ids.length; i++) {
                            $(this).find('>tbody>tr.jqgrow>td>input[type="checkbox"]')[i].checked = true;
                        }
                        if (condiA == 'disablefill') {
                            var cbs = $("tr.jqgrow > td > input.cbox", $("#GridIndentNo")[0]);
                            var hbs = $("tr.ui-jqgrid-labels > th > div > input.cbox", $("#GridIndentNo")[0]);
                            cbs.prop("disabled", "disabled");
                            hbs.prop("disabled", "disabled");
                        }
                    }
                }
            },
            beforeSelectRow: function (rowid, e) {
                if (e.target.type == 'checkbox' && e.toElement.cellIndex == undefined) {
                    if (e.target.checked == true) GetIndentMtrlBind(rowid,e);
                    else RmvMtrlForIndentNo(rowid);
                }
            },
        }).trigger("reloadGrid");
        $("#cb_GridIndentNo")[0].style.display = 'none';
        $('.ui-jqgrid-sdiv').removeClass('ui-widget-content');
        $("#GridIndentNo").parents('div.ui-jqgrid-bdiv').css("overflow-y", "scroll");
}

person Community    schedule 16.05.2018    source источник


Ответы (2)


Я установил row.Date, потому что я не знаю имя столбца даты или имя столбца идентификатора, я сказал им дату и номер:

  rows = (from DataRow row in load.Rows
              let lasts = row.Number.Substring(row.Number- 3, 3)
             orderby row.Date descending, lasts descending
                select new
                {
                    id = ("" + row["INDENTNO"]).Trim(),
                    cell = new string[] { 
                        GeneralFunction.GetDate(("" + row["INDENTDATE"]).Trim()), ("" + row["INDENTNO"]).Trim()
                 }
    }).ToArray()
person Jordi Jordi    schedule 16.05.2018
comment
Это примерно так: rows = (из строки DataRow в load.Rows orderby row[INDENTDATE] по убыванию, row[INDENTNO] по убыванию select new{....} - person ; 16.05.2018

Спасибо Джорди, я нашел еще один способ сделать то же самое.

 DataView dv = ds.Tables[0].DefaultView;
 dv.Sort = "INDENTDATE desc";
 dv.Sort = "INDENTNO desc";
 DataTable sortedDT = dv.ToTable();

это тоже работает., Хорошего дня.,

person Community    schedule 16.05.2018