我正在尝试开发一个需要从PHP填充数据网格的Silverlight应用程序。我使用JSON格式可以正常运行PHP,Silverlight可以读取数据,但是如何将这些数据添加到数据网格中。我正在寻找使用DataRow在C#WF中以类似方式添加新程序,但这似乎在Silverlight中不可用。
我最近发现了如何通过创建一个类来实现这一点,例如名为在其中获取设置方法的名称。然后使用以下代码为datagrid创建数据源
List<Names> source = new List<Names>();
foreach (JsonValue item in arrayJson)
{
string firstName = item["FirstName"].ToString().Replace('"', ' ').Trim();
string lastName = item["LastName"].ToString().Replace('"', ' ').Trim();
string age = item["Age"].ToString().Replace('"', ' ').Trim();
source.Add(new Names()
{
FirstName = firstName,
LastName = lastName,
Age = age
});
//MessageBox.Show("First Name: " + firstName + "\nLast Name: " + lastName + "\nAge: " + age, "Names", MessageBoxButton.OK);
}
tblGrid.ItemsSource = source;
但是,当使用此代码时,它会为数据库中没有文本的记录数创建一个空行。当我调试它并查看项目的源集合时,它显示所有正确的值,但datagrid显示空行。
答案 0 :(得分:0)
我通常创建一个POCO(Plain Old CLR Object - 或Value Object),然后使用Silverlight .Net DLL中的JSON库将JSON返回解析为我的POCO集合。像这样......
using System.Json;
public void DoArticleSearch()
{
WebClient proxy = new WebClient();
proxy.OpenReadAsync(new Uri(uriString));
proxy.OpenReadCompleted += (s, e) =>
{
if (e.Error != null)
{
string errorMsg = e.Error.Message;
}
JsonObject completeResult = (JsonObject)JsonObject.Load(e.Result);
string jsonOffset = completeResult["offset"].ToString();
string jsonTotal = completeResult["total"].ToString();
JsonArray resultsArray = (JsonArray)completeResult["results"];
ObservableCollection<Article> localArticles;
if (Offset == 0)
{
localArticles = new ObservableCollection<Article>();
}
else
{
localArticles = Articles;
}
foreach (JsonObject obj in resultsArray)
{
Article a = new Article();
if (obj.Keys.Contains("body"))
{
a.Body = obj["body"];
}
if (obj.Keys.Contains("byline"))
{
a.ByLine = obj["byline"];
}
if (obj.Keys.Contains("date"))
{
a.Date = a.FormattedDateTime(obj["date"]);
}
if (obj.Keys.Contains("title"))
{
a.Title = obj["title"];
}
if (obj.Keys.Contains("url"))
{
a.Url = new Uri(obj["url"]);
}
localArticles.Add(a);
}
Articles = localArticles;
};
}
上述示例不包括方法调用中使用的所有using语句或属性定义。该方法驻留在我的视图模型中,而Articles属性绑定到实际Silverlight页面上的可视元素(数据网格)。
但是,如果您使用Silverlight for Windows Phone进行开发,则需要使用第三方JSON.Net库。
答案 1 :(得分:0)
修正了它,需要启用自动生成列名称才需要弄清楚如何重命名这些列标题。