我创建了一个提供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,所以不知道如何绑定它。
答案 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();