将 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();
我创建了一个提供 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();