How to remove extra column value from jqgrid json data

Andrus

Free Jqgrid has actions column. colmodel:

{"hidden":false,"label":"","name":"_actions","width":72
,"align":"left","template":"actions","fixed":false,"resizable":true,
  "formatoptions":{"editbutton":true,"delbutton":true,"delOptions":{"url":"Delete" }}},

{"label":"Nimetus","name":"Nimi","index":"Nimi","editoptions":{"maxlength":80,"size":80 }

It is populated from remote json data like

{"total":1,
 "page":1,
  "rows":[{"id":"2ARVELDUSARV", "cell":[null,"2ARVELDUSARV"]},
          {"id":"ACME","cell":[null,"ACME"]},
          {"id":"KAKSKOERA","cell":[null,"KAKSKOERA"]}
 ]
}

In cell array first column is not used. If this column is removed, jqgrid does not render data correctly since this column presence is required as placeholder for actions column. How to fix this so that jqgrid will accept data without first column:

{"total":1,
 "page":1,
  "rows":[{"id":"2ARVELDUSARV", "cell":[null,"2ARVELDUSARV"]},
          {"id":"ACME","cell":["ACME"]},
          {"id":"KAKSKOERA","cell":["KAKSKOERA"]}
 ]
}

Update

I looked for data format change as recommended in answer. jqgrid data is created from sql select statement in ASP.NET MVC4 using code below. Web API serializes this to format for json for jqgrid automatically.

How to create result which can serialized to propertyname: value format recommended in answer ?

  object GetDataForJqGrid() {
        IDbConnection conn;
        using (var dataReader = DataAccessBase.ExecuteReader(sql.ToString(), out conn,
               CommandBehavior.CloseConnection | CommandBehavior.SingleResult,
               sql.GetParameters.ToArray()))
        {
            var rowList = new List<GridRow>();
            var pkeys = DatabasePrimaryKey();
            while (dataReader.Read())
            {
                var pkv = new List<object>();
                int offset = 1; // required for actions column
                var row = new GridRow
                {
                    id = IdHelper.EncodeId(pkv),
                    cell = new object[dataReader.FieldCount + offset + imageCount]
                };
                for (int j = 0; j < dataReader.FieldCount; j++)
                   row.cell[offset + j] = dataReader.GetValue(j);
                rowList.Add(row);
            }

            return new
            {
                total = rowList.Count() < rows ? page : page + 1,                                  page, 
          rows = rowList
            };
}

public class GridRow
{
    public string id;
    public object[] cell;
}
Oleg

The most easy way would be to chanege the format of data returned from the server to use repeatitems: false style of the data. I mean the usage of

{
    "total": 1,
    "page": 1,
    "rows": [
        { "id": "2ARVELDUSARV", "Nimi": "2ARVELDUSARV" },
        { "id": "ACME", "Nimi": "ACME" },
        { "id": "KAKSKOERA", "Nimi": "KAKSKOERA"}
    ]
}

or, after adding key: true to the definition of the column Nimi

{
    "total": 1,
    "page": 1,
    "rows": [
        { "Nimi": "2ARVELDUSARV" },
        { "Nimi": "ACME" },
        { "Nimi": "KAKSKOERA"}
    ]
}

instead of

{
    "total": 1,
    "page": 1,
    "rows": [{
        "id": "2ARVELDUSARV",
        "cell": ["2ARVELDUSARV"]
    }, {
        "id": "ACME",
        "cell": ["ACME"]
    }, {
        "id": "KAKSKOERA",
        "cell": ["KAKSKOERA"]
    }]
}

Alternatively one can use jsonReader: { repeatitems: false } event with your current format of data and add jsonmap: "cell.0" property to, which means getting the first element (index 0) from the array cell:

$("#list").jqGrid({
    datatype: "json",
    url: "andrus.json",
    colModel: [
        { label: "", name: "_actions", template: "actions" },
        { label: "Nimetus", name: "Nimi", jsonmap: "cell.0" }
    ],
    iconSet: "fontAwesome",
    jsonReader: { repeatitems: false }
});

see the demo.

I personally would recommend you don't use your original format (cell with array of values) and use just the named property with additional id property (if id value is not included in the item already). If you would do use the solution with jsonmap you should be carefully with changing the order of the columns (using remapColumns) and later reloading of data. You could required to update jsonmap values after the changing the column order. Thus I repeat that I recommend you to change format of data returned from the server.

UPDATED: The Updated part of your question formulate absolutely new question which have no relation with jqGrid. It's pure C# problem. Nevertheless I try to answer, because I use C# too.

What you can do with minimal changes of your code is the following: You should add using System.Dynamic; and using System.Linq; first of all. Then you should replace the code inside of using (...) {...} to about the following

var rowList = new List<dynamic>();
while (dataReader.Read()) {
    var row = new ExpandoObject() as IDictionary<string, object>;
    for (int j = 0; j < dataReader.FieldCount; j++) {
        if (!dataReader.IsDBNull(j)) {
            row.Add(dataReader.GetName(j), dataReader.GetValue(j));
        }
    }
    rowList.Add(row);
}

Serializing of rowList will produce the names properties. If you know the primary key of the data, then you can add id property with the corresponding value in the same way (using row.Add("id", IdHelper.EncodeId(pkv))). I don't included the part because the code which you posted is not full and pkv is currently always new List<object>(), which is wrong. If the data have composed key (multiple value set is unique) then you can make string concatenation of the keys using '_' (underscore) as the separator.

Collected from the Internet

Please contact [email protected] to delete if infringement.

edited at
0

Comments

0 comments
Login to comment

Related

From Dev

How to remove extra array from Json data in php

From Dev

Remove jqGrid editoptions from a Column

From Dev

Get data from JSON to jqGrid

From Dev

How to remove extra column Datagrid

From Dev

How to remove extra field 'decoratedClass' in JSON response for Spring Data projections?

From Dev

How can I remove extra data from Python logging file?

From Dev

How to group data in jqgrid depending on column data

From Dev

How to remove data from table if the ID is in the column

From Dev

Remove extra spaces from cells in column

From Dev

Remove extra spaces from cells in column

From Dev

how to align jqgrid 4.10 column headers and data

From Dev

how to align jqgrid 4.10 column headers and data

From Dev

How to remove underscores from json key value

From Dev

How to remove a value from a JSON array?

From Dev

JQgrid: not rendering table correctly from JSON data

From Dev

jQgrid toolbar searching - dynamically remove search box from any column

From Dev

Remove extra white spaces from the json

From Dev

Remove extra spaces and new lines from JSON

From Dev

How to set variable value from column data?

From Dev

JQGrid remove cell value from custom error message in inline editing

From Dev

how to get multiple column data from json

From Dev

Kendo data grid - how to set column value from nested JSON object?

From Dev

jqGrid - how to delete row from local data?

From Dev

pass value from jqgrid to php and dispaly the data based on the value passed

From Dev

mysql - how to display count of a value in an extra column

From Dev

How to remove string value from column in pandas dataframe

From Dev

How to remove a row from a list based on the value of a column

From Dev

How to remove duplicate from rows and convert its value to column in pandas

From Dev

How to remove extra character from http request?

Related Related

  1. 1

    How to remove extra array from Json data in php

  2. 2

    Remove jqGrid editoptions from a Column

  3. 3

    Get data from JSON to jqGrid

  4. 4

    How to remove extra column Datagrid

  5. 5

    How to remove extra field 'decoratedClass' in JSON response for Spring Data projections?

  6. 6

    How can I remove extra data from Python logging file?

  7. 7

    How to group data in jqgrid depending on column data

  8. 8

    How to remove data from table if the ID is in the column

  9. 9

    Remove extra spaces from cells in column

  10. 10

    Remove extra spaces from cells in column

  11. 11

    how to align jqgrid 4.10 column headers and data

  12. 12

    how to align jqgrid 4.10 column headers and data

  13. 13

    How to remove underscores from json key value

  14. 14

    How to remove a value from a JSON array?

  15. 15

    JQgrid: not rendering table correctly from JSON data

  16. 16

    jQgrid toolbar searching - dynamically remove search box from any column

  17. 17

    Remove extra white spaces from the json

  18. 18

    Remove extra spaces and new lines from JSON

  19. 19

    How to set variable value from column data?

  20. 20

    JQGrid remove cell value from custom error message in inline editing

  21. 21

    how to get multiple column data from json

  22. 22

    Kendo data grid - how to set column value from nested JSON object?

  23. 23

    jqGrid - how to delete row from local data?

  24. 24

    pass value from jqgrid to php and dispaly the data based on the value passed

  25. 25

    mysql - how to display count of a value in an extra column

  26. 26

    How to remove string value from column in pandas dataframe

  27. 27

    How to remove a row from a list based on the value of a column

  28. 28

    How to remove duplicate from rows and convert its value to column in pandas

  29. 29

    How to remove extra character from http request?

HotTag

Archive