Как связать XML с сеткой данных в Silverlight - PullRequest
1 голос
/ 09 марта 2009

У меня есть приложение, которое получает XML с сервера. Я хочу привязать данные к сетке данных, и было бы здорово, если бы сетка автоматически генерировала столбцы. До сих пор я много пытался в своем коде.

Страница XAML:

<data:DataGrid x:Name="Status" ItemsSource="{Binding}" AutoGenerateColumns="True">
</data:DataGrid>

Код для страницы:

void Status_OpenReadCompleted(object sender, OpenReadCompletedEventArgs e)
{
    XElement recordSet = XElement.Load(e.Result);
    CamerasStatusTabDataGrid.ItemsSource = recordSet.Elements("Status");
}

XML с сервера:

<StatusReport>
    <Status Description="Spilled Coffe on Server" Date="2/5/2009" />
    <Status Description="Mice in Copier" Date="4/3/2008" />
    <Status Description="Helped User Find Any Key" Date="6/2/2008" />
</StatusReport>

Я хочу, чтобы статус был строкой в ​​сетке, а столбцы «Описание» и «Дата» были.

Ответы [ 3 ]

4 голосов
/ 10 марта 2009

Хороший способ сделать это - использовать Linq to Xml, полный пример приведен ниже:

Page.xaml:

<UserControl x:Class="SilverlightApplication1.Page"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:data="clr-namespace:System.Windows.Controls;assembly=System.Windows.Controls.Data"
    Width="400" Height="300"
    Loaded="Page_Loaded">

    <Grid x:Name="LayoutRoot" Background="White">
        <data:DataGrid x:Name="DataGrid1" />
    </Grid>
</UserControl>

Page.xaml.cs:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Windows;
using System.Windows.Controls;
using System.Xml.Linq;

namespace SilverlightApplication1
{
    public partial class Page : UserControl
    {
        public Page()
        {
            InitializeComponent();
        }

        private void Page_Loaded(object sender, RoutedEventArgs e)
        {
            DataGrid1.ItemsSource = GetStatusReport();
        }

        public List<Status> GetStatusReport()
        {
            List<Status> statusReport = new List<Status>();

            // Get your Xml using XElement.Load(e.Result);
            XElement doc = XElement.Load(@"Data/StatusReport.xml");

            statusReport = (from el in doc.Elements()
                            select GetStatus(el)).ToList();

            return statusReport;
        }

        private Status GetStatus(XElement el)
        {
            Status s = new Status();
            s.Description = el.Attribute("Description").Value;
            s.Date = DateTime.Parse(el.Attribute("Date").Value);
            return s;
        }
    }
}

Убедитесь, что вы добавили ссылку на сборку System.Xml.Linq. Это приводит к выводу, который вы искали, с состоянием для каждой строки в сетке с столбцами «Описание» и «Дата».

альтернативный текст http://www.freeimagehosting.net/uploads/aa3f9978fc.png

1 голос
/ 25 ноября 2009

Smith

У меня было похожее требование, которое вы упомянули. Я разместил статью в коде проекта о решении. http://www.codeproject.com/KB/silverlight/SilverlightDGFromMDB.aspx

Надеюсь, это поможет.

Спасибо Р. Арасу Эланго

0 голосов
/ 10 марта 2009

Пожалуйста, посмотрите на следующую ссылку .

Он содержит работающий код (в моей среде), который создает класс со свойствами во время выполнения. Класс используется для заполнения универсального IList , который может служить в качестве источника для сетки данных.

Мне было неудобно размещать код здесь, потому что 99,99999% его нет мой.

По ссылкам вы перейдете к исходному сообщению, где вы найдете работающий Silverlight. код как комментарий, оставленный мной.

Некоторое время назад я опубликовал другой подход с использованием конвертера значений: Динамическое связывание XML с DataGrid в Silverlight

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...