DataGrid和Silverlight
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了DataGrid和Silverlight相关的知识,希望对你有一定的参考价值。
我正在尝试开发一个需要从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 + "
Last Name: " + lastName + "
Age: " + age, "Names", MessageBoxButton.OK);
}
tblGrid.ItemsSource = source;
但是,使用此代码时,它会为数据库中的记录数创建一个空行,而不是文本。当我调试它并查看项目的源集合时,它显示所有正确的值,但datagrid显示空白行。
我通常创建一个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库。
修复它,需要启用自动生成列名称只需要解决如何重命名这些列标题。
以上是关于DataGrid和Silverlight的主要内容,如果未能解决你的问题,请参考以下文章
Silverlight:如何访问 DataGrid RowDetailTemplate 中的控件
WPF DataGrid 样式-Silverlight DataGrid?
增加 Silverlight DataGrid 中的列宽以填充整个 DG 宽度
Silverlight:将按钮控件与 Datagrid 单元格内的右侧对齐