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 单元格内的右侧对齐

Silverlight 2 DataGrid December 2008

Silverlight- DataGrid 控件 - 选择更改事件干扰排序