将 JSON 绑定到 GridView ASP.net C#

Bind JSON to GridView ASP.net C#

我创建了一个提供 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 上工作,所以不知道如何绑定它..

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

数据源应该是实现"IEnumerable"接口的类型,List和Array满足。

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();

是的,您将需要嵌套网格来处理 数据 属性。在外部网格的 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();
    }
}

您可以使用 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();