将JSON绑定到GridView ASP.net C#

时间:2018-08-17 07:14:48

标签: c# asp.net json gridview

我创建了一个提供JSON字符串的函数,我想将其绑定到Gridview。由于json在对象内部有数组,所以我认为也许需要嵌套的gridview。 这是我的功能

List<BanquetMenuType> listMenu = new List<BanquetMenuType>();
listMenu = wsobj.GetOrdermenuTypeByOid(OrderID);

for (int i = 0; i < listMenu.Count; i++)
{
    listMenu[i].data = wsobj.GetOrderMenuById(listMenu[i].OrderID, listMenu[i].MenuId);
}

var json = new JavaScriptSerializer().Serialize(listMenu);
return json;

JSON字符串响应为:

[
  {
    "data": [
      {
        "MenuName": ""
      },
      {
        "MenuName": "baingan"
      },
      {
        "MenuName": "bhendi"
      },
      {
        "MenuName": "paneer TIkka"
      }
    ],
    "OrderID": 24,
    "MenuId": 1,
    "MenuType": "Sabjee"
  },
  {
    "data": [
      {
        "MenuName": ""
      },
      {
        "MenuName": "cucmber chips"
      }
    ],
    "OrderID": 24,
    "MenuId": 2,
    "MenuType": "Salad"
  }
]

我要在MenuType下选择菜单名称 我之前没有处理过JSON,所以不知道如何绑定它。

2 个答案:

答案 0 :(得分:2)

没有理由将列表对象(“ listMenu”)转换为JSON。它也不会工作。

数据源的类型应实现列表和数组满足的“ IEnumerable”接口。

List<BanquetMenuType> listMenu = new List<BanquetMenuType>();
listMenu = wsobj.GetOrdermenuTypeByOid(OrderID);

for (int i = 0; i < listMenu.Count; i++)
{
    listMenu[i].data = wsobj.GetOrderMenuById(listMenu[i].OrderID, listMenu[i].MenuId);
}
outerGrid.DataSource = listMenu;
outerGrid.DataBind();

是的,您需要具有嵌套的网格才能处理 data 属性。在外部网格的RowDataBound事件中,您需要将 data 属性绑定到嵌套网格。
示例代码:

protected void OuterGrid_OnRowDataBound(object sender, GridViewRowEventArgs e)
{
    if (e.Row.RowType == DataControlRowType.DataRow)
    {
        var dataItem = outerGrid.Rows[e.RowIndex].DataItem as BanquetMenuType;
        GridView innerGrid = e.Row.FindControl("innerGrid") as GridView;
        innerGrid.DataSource = dataItem.data;
        innerGrid.DataBind();
    }
}

答案 1 :(得分:0)

您可以使用JsonConvert.DeserializeObject反序列化json进行转换-下面给出了两种方法

string jsonString = "Your JSON string ";   

//Create a dynamic object, here you have to import Newtonsoft.Json 

dynamic dynamicObject= JsonConvert.DeserializeObject(jsonString);  

//Binding GridView to dynamic object   
myGrid.DataSource = dynamicObject;  
myGrid.DataBind();  

//-----OR -----

//Using DataTable, here you have to import System.Data  

DataTable dataTable= JsonConvert.DeserializeObject<DataTable>(jsonString); 

//Binding GridView to dataTable object   
myGridTwo.DataSource = dataTable;  
myGridTwo.DataBind();