Foreach 使用 C# 和 JSON 将项目绑定到数据表

Foreach bind items to Datatable with C# and JSON

    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。请帮帮我。

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

您似乎没有向 table 添加行,因此当绑定发生时,没有数据。这应该可以解决该问题:

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
}