DataGrid和Silverlight

时间:2011-03-29 20:03:46

标签: php mysql silverlight datagrid

我正在尝试开发一个需要从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显示空行。

2 个答案:

答案 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)

修正了它,需要启用自动生成列名称才需要弄清楚如何重命名这些列标题。