C# – sorting in asp.net

centity-frameworkextjsnetsql-server-2005

var store = new FMP.AspNetJsonStore({
    fields: [
               { name: 'AssetID' },
               { name: 'AssociationID' },
               { name: 'Image' },
               { name: 'StatusName' },
               { name: 'ModelName' },
               { name: 'IPAddress' },
               { name: 'InScope', type: 'boolean' },
               { name: 'ServicePlanName' },
               { name: 'PricePlanName' },
               { name: 'PricePlanDescription' },
               { name: 'Program' },
               { name: 'ServicePlanID' },
               { name: 'Customer' },
               { name: 'Black', type: 'float' },
               { name: 'Cyan', type: 'float' },
               { name: 'Magenta', type: 'float' },
               { name: 'Yellow', type: 'float' },
               { name: 'BlackPct' },
               { name: 'CyanPct' },
               { name: 'MagentaPct' },
               { name: 'YellowPct' },
               { name: 'PrinterMarkerSupplies' },
               { name: 'PageCount' },
               { name: 'BlackImpressions' },
               { name: 'ColorImpressions' },
               { name: 'PricePlanID' },
               { name: 'ResponsibilityForAction' },
               { name: 'PrinterSerialNumber' }
           ],

    totalProperty: "TotalCount",
    autoLoad: { params: { start: 0, limit: myPageSize} },
    //autoLoad: true,
    proxy: new Ext.data.HttpProxy({
        // Call web service method using GET syntax
        url: 'GetPrintersGrid.asmx/buildGrid',
        // Ask for Json response
        headers: { 'Content-type': 'application/json' },
        method: "GET"
    }),
    remoteSort: true,
    //sortInfo: { field: 'PageCount', direction: "DESC" },
    groupField: 'Customer',
    root: 'Records'
});

store.setDefaultSort('PageCount', 'DESC');

Here is the web service i used

public PagedResult<FMPAsset> buildGrid(int start, int limit, string sortfield, string dir)
{
    var a=5;

    Guid AccountID = (Guid)Session["AccountID"];
    //string sortdir;
    //if( dir == "DESC")
    //{
    //    sortdir = dir.Substring(0, 4).Trim().ToUpper();
    //}
    //else
    //{
    //    sortdir = dir.Substring(0, 3).Trim().ToUpper();
    //}

    string SortExpression = sortfield + " " + (!String.IsNullOrEmpty(dir) ? dir : String.Empty);

    //string whereClause = "SELECT value a FROM XSP_AssetList_V AS a WHERE a.AccountID = GUID'" + AccountID + "' order by a.PageCount = '" +  + "'";
    string whereClause = "SELECT value a FROM XSP_AssetList_V AS a WHERE a.AccountID = GUID'" + AccountID + "' Order By  a."+SortExpression;
    //string whereClause = "SELECT value a , ROW_NUMBER() OVER(ORDER BY"
    //     + " " + SortExpression
    //     + ") As RowNumber FROM XSP_AssetList_V AS a WHERE a.AccountID = GUID'"
    //     + AccountID + "'";
    //string whereClause = "SELECT value a FROM XSP_AssetList_V AS a WHERE a.AccountID = GUID'" + AccountID + "'";
    List<FMPAsset> fmpAssets = new List<FMPAsset>();

    using (XSPAssetModel.XSPAssetEntities assetEntities = new XSPAssetEntities(b.BuildEntityConnectionString1("XSMDSN")))
    {
        ObjectQuery<XSP_AssetList_V> assets = new ObjectQuery<XSP_AssetList_V>(whereClause, assetEntities);
        //var assetOrder = assets.OrderBy(x => x.StatusName).ToList();
        var assetPage = assets.Skip(start).Take(limit);

        //var totalAssetCount = assets.Count();

        currentAssets = assetPage.ToList();
        int currentAssetsCount = currentAssets.Count;
        string imgprefix = System.Configuration.ConfigurationManager.AppSettings["ImgPrefix"];
        char[] separators = { '/' };
        string appname = "";
        int lastloc = imgprefix.Substring(0, imgprefix.Length - 1).LastIndexOfAny(separators);
        if (lastloc > 6)
        {
            appname = imgprefix.Substring(lastloc + 1);
        }

        FMPAsset asset = new FMPAsset();

        //StreamWriter sw = new StreamWriter("C:\\test.txt");

        XSPPrinterMarkerSupplyModel.XSPPrinterMarkerSupplyEntities markerCtx =
            new XSPPrinterMarkerSupplyModel.XSPPrinterMarkerSupplyEntities(b.BuildEntityConnectionString1("XSMDSN"));

        for (int x = 0; x < currentAssetsCount; x++)
        {
            asset = new FMPAsset();

            asset.AssetID = currentAssets[x].AssetID.ToString();
            asset.PricePlanID = currentAssets[x].PricePlanID.ToString();
            asset.AssociationID = currentAssets[x].AssociationID;
            asset.ModelName = currentAssets[x].ModelName;
            asset.ResponsibilityForAction = currentAssets[x].ResponsibilityForAction;
            asset.IPAddress = (String.IsNullOrEmpty(currentAssets[x].PrinterIPAddress)) ? "No IP" : currentAssets[x].PrinterIPAddress; ;

            if (currentAssets[x].InScope)
            {
                asset.InScope = b.GetString("SDE_YES");
            }
            else
            {
                asset.InScope = b.GetString("SDE_NO");
            }

            asset = SetStatus(appname, asset, x);

            asset.PricePlanName = currentAssets[x].Program;
            asset.PricePlanDescription = currentAssets[x].PricePlanDescription;
            asset.ServicePlanName = currentAssets[x].ServicePlanName;

            if (currentAssets[x].PrinterSerialNumber != null)
            {
                asset.PrinterSerialNumber = currentAssets[x].PrinterSerialNumber;
            }
            else
            {
                asset.PrinterSerialNumber = "-";
            }

            //sw.WriteLine("ChargebackDescription: " + DateTime.Now.Millisecond);
            if (this.b.UseChargebackDescription
                 && !String.IsNullOrEmpty(currentAssets[x].CustomerChargebackDescription)
                 && currentAssets[x].CustomerChargebackDescription != "Generated by OUT Integration")
            {
                asset.Customer = currentAssets[x].CustomerChargebackDescription;

                if (asset.Customer.IndexOf(Environment.NewLine) > -1)
                {
                    asset.Customer =
                        asset.Customer.Substring(0, asset.Customer.IndexOf(Environment.NewLine));
                }
            }
            else
            {
                asset.Customer = currentAssets[x].CustomerChargeBackEntryName;
            }

            if (this.b.UsePricePlanDescription && !String.IsNullOrEmpty(currentAssets[x].PricePlanDescription))
            {
                asset.Program = currentAssets[x].PricePlanDescription;
                if (asset.Program.IndexOf(Environment.NewLine) > -1)
                {
                    asset.Program =
                        asset.Program.Substring(0, asset.Program.IndexOf(Environment.NewLine));
                }
            }
            else
            {
                asset.Program = currentAssets[x].Program;
            }

            asset.BlackPct = -3;
            asset.CyanPct = -3;
            asset.MagentaPct = -3;
            asset.YellowPct = -3;

            Guid id = currentAssets[x].AssetID;

            asset = SetCMYKvalues(asset, x);

            BuilldImpressionsValues(currentAssets[x], ref asset);
            fmpAssets.Add(asset);
        }
        //CommonGrid1.ApplyUserPreferences();

        //JavaScriptSerializer json = new JavaScriptSerializer();
        //string JsonArray = json.Serialize(fmpAssets);
        //string ArrayDeclaration = string.Format("var arr = {0};", JsonArray);
        //Page.ClientScript.RegisterClientScriptBlock(this.GetType(), "fmpAssets", ArrayDeclaration, true);

        //assetEntities.Dispose();
        var totalAssetCount = assets.Count();
        var y = new PagedResult<FMPAsset>();
        y.Records =  fmpAssets;
        y.TotalCount = totalAssetCount;
        return y;

        // CommonGrid1.BindDataSource(SortByStatusName(fmpAssets));
    }
}

I am getting an error saying:

{"Message":"Invalid JSON primitive:
DESC.","StackTrace":" at
System.Web.Script.Serialization.JavaScriptObjectDeserializer.DeserializePrimitiveObject()\r\n
at
System.Web.Script.Serialization.JavaScriptObjectDeserializer.DeserializeInternal(Int32
depth)\r\n at
System.Web.Script.Serialization.JavaScriptObjectDeserializer.BasicDeserialize(String
input, Int32 depthLimit,
JavaScriptSerializer serializer)\r\n
at
System.Web.Script.Serialization.JavaScriptSerializer.Deserialize(JavaScriptSerializer
serializer, String input, Type type,
Int32 depthLimit)\r\n at
System.Web.Script.Services.RestHandler.GetRawParamsFromGetRequest(HttpContext
context, JavaScriptSerializer
serializer, WebServiceMethodData
methodData)\r\n at
System.Web.Script.Services.RestHandler.GetRawParams(WebServiceMethodData
methodData, HttpContext context)\r\n
at
System.Web.Script.Services.RestHandler.ExecuteWebServiceCall(HttpContext
context, WebServiceMethodData
methodData)","ExceptionType":"System.ArgumentException"}

Can anyone help me in this issue?

Best Answer

Sure Here is the JSON store

Ext.ns("FMP");

    FMP.AspNetJsonReader = Ext.extend(Ext.data.JsonReader, {

        read: function(response) {
            // Assuming ASP.NET encoding - Data is stored as 
            var json = response.responseText;
            var o = Ext.decode(json);
            if (!o) {
                throw { message: "AspNetJsonReader.read: Json object not found" };
            }
            if (!o.d) {
                throw { message: "AspNetJsonReader.read: Root element d not found" };
            }
            return this.readRecords(o.d);

        }

    });

    FMP.AspNetJsonStore = Ext.extend(Ext.data.GroupingStore, {
        /**
        * @cfg {Ext.data.DataReader} reader @hide
        */
        constructor: function(config) {
            FMP.AspNetJsonStore.superclass.constructor.call(this, Ext.apply(config, {
                reader: new FMP.AspNetJsonReader(config)
            }));
        }
    });
Related Topic