Foreach使用C#和JSON将项绑定到Datatable

时间:2015-05-29 17:37:32

标签: c# asp.net json.net repeater

    DataTable dtInventory = new DataTable();
    dtInventory.Columns.Add("ItemID", typeof(string));
    dtInventory.Columns.Add("ItemImageUrl", typeof(string));
    dtInventory.Columns.Add("ItemName", typeof(string));
    dtInventory.Columns.Add("Tradeable", typeof(string));

    string json = new WebClient().DownloadString("storeJSON.txt");
    JToken jsonInventory = JToken.Parse(json);
    JObject jsonItemData = jsonInventory["StoreData"].Value<JObject>();

    foreach (JProperty jItemID in jsonItemData.Properties())
    {
        string sItemID = jItemID.Name.Trim().ToString();

        for (int i = 0; i < jsonItemData.Count; i++)
        {
            DataRow dtRow = dtInventory.NewRow();
            dtRow["ItemID"] = sItemID.ToString();
            dtRow["ItemImageUrl"] = jsonItemData[sItemID]["icon_url"].ToString();
            dtRow["ItemName"] = jsonItemData[sItemID]["market_name"].ToString();
            dtRow["Tradeable"] = jsonItemData[sItemID]["tradable"].ToString();
        }
    }
    this.rptInventory.DataSource = dtInventory;
    this.rptInventory.DataBind();

我是c#和asp.net的新手,我花了2个小时来修复这些代码,但我仍然无法将项目绑定到DataTable。请帮帮我。

2 个答案:

答案 0 :(得分:0)

创建一个Inventory对象,并将json项添加到List<Inventory>,而不是使用数据表。然后,您可以将List<Intentory>设置为DataSource的{​​{1}}。

答案 1 :(得分:0)

看起来您并未向表中添加行,因此在绑定发生时,没有数据。这应该可以解决这个问题:

for (int i = 0; i < jsonItemData.Count; i++) {
          DataRow dtRow = dtInventory.NewRow();
          dtRow["ItemID"] = sItemID.ToString();
          dtRow["ItemImageUrl"] = jsonItemData[sItemID]["icon_url"].ToString();
          dtRow["ItemName"] = jsonItemData[sItemID]["market_name"].ToString();
          dtRow["Tradeable"] = jsonItemData[sItemID]["tradable"].ToString();

          dtInventory.Rows.Add(dtRow); //this line adds the row to the table
}