Search code examples
c#.netxmlwpfdatagrid

How do I fill my DataGrid with my C# list containing my XML Data that was parsed from a XML Node Reader?


I have data in my XML file that i collected by reading my XML file and storing my data based on each node into an object.

I want to fill my DataGrid with the data from my List (jobList), but I am not sure what I'm doing wrong.

Dynamically building table and adding data. Building the XML manually.

    public partial class amgrid : Window
    {
        public static Configuration AppSettings { get; set; }
        JobList job = new JobList();

        public amgrid()
        {
            InitializeComponent();
            XmlDocument doc = new XmlDocument();
            string docPath = @"C:\Users\contract_lshamoon\Desktop\arm\arm\arm\xmldb.xml";
            doc.Load(docPath);
            XmlElement root = doc.DocumentElement;
            XmlNodeList elemList = root.GetElementsByTagName("Jobs");
            findAllNodes(root);
            doc.Save(@"C:\Users\contract_lshamoon\Desktop\arm\arm\arm\xmldb.xml");
            DG.DataContext = job;

        }

        int index = 0;
        public void findAllNodes(XmlNode node)
        {
            index++;
            foreach (XmlNode n in node)
                findAllNodes(n);

            if (node.Name == "Job")
            {
                job.Job = index.ToString();
                Console.WriteLine();
                Console.WriteLine("job.Job" + " : " + index + " : " + job.Job);
            }
            if (node.Name == "JobDate")
            {
                job.JobDate = node.InnerText;
                Console.WriteLine("Job.JobDate" + " : " + job.JobDate);
            }
            if (node.Name == "File")
            {
                job.File = node.InnerText;
                Console.WriteLine("Job.File" + " : " + job.File);
            }
            if (node.Name == "FilePath")
            {
                job.FilePath = node.InnerText;
                Console.WriteLine("Job.FilePath" + " : " + job.FilePath);
            }
            if (node.Name == "Extension")
            {
                job.Extension = node.InnerText;
                Console.WriteLine("Job.Extension" + " : " + job.Extension);
            }
            if (node.Name == "Age")
            {
                job.Age = node.InnerText;
                Console.WriteLine("Job.Age" + " : " + job.Age);
            }
            if (node.Name == "JobComment")
            {
                job.JobComment = node.InnerText;
                Console.WriteLine("Job.JobComment" + " : " + job.JobComment);
            }
        }

        private List<JobList> LoadCollectionData()
        {
            List<JobList> jobList = new List<JobList>();

            jobList.Add(new JobList()
            {
                Job = job.Job,
                JobDate = job.JobDate,
                FilePath = job.FilePath,
                Extension = job.Extension,
                Age = job.Age,
                JobComment = job.JobComment
            });

            return jobList;
        }
    }

    public class JobList
    {
        [XmlAttribute("JobId")]
        public string Job { get; set; }
        [XmlElement("JobDate")]
        public string JobDate { get; set; }
        [XmlElement("File")]
        public string File { get; set; }
        [XmlElement("FilePath")]
        public string FilePath { get; set; }
        [XmlElement("Extension")]
        public string Extension { get; set; }
        [XmlElement("Age")]
        public string Age { get; set; }
        [XmlElement("JobComment")]
        public string JobComment { get; set; }
    }

    <Grid>
        <DataGrid x:Name="DG" ItemsSource="{Binding jobList}">
            <DataGrid.Columns>
                <DataGridTextColumn x:Name="JobCol" Binding="{Binding Job}" Header="Job"/>
                <DataGridTextColumn x:Name="JobDateCol" Binding="{Binding JobDate}" Header="Date"/>
                <DataGridTextColumn x:Name="FilePathCol" Binding="{Binding FilePath}" Header="Path"/>
                <DataGridTextColumn x:Name="ExtensionCol" Binding="{Binding Extension}" Header="Extension"/>
                <DataGridTextColumn x:Name="AgeCol" Binding="{Binding Age}" Header="Age"/>
                <DataGridTextColumn x:Name="JobCommentCol" Binding="{Binding JobComment}" Header="Comment"/>
            </DataGrid.Columns>

        </DataGrid>
    </Grid>

I just want every row to have each list item displayed.


Solution

  •     public class JobList
        {
            [XmlElement("Job")]
            public string Job { get; set; }
            [XmlElement("JobDate")]
            public string JobDate { get; set; }
            [XmlElement("File")]
            public string File { get; set; }
            [XmlElement("FilePath")]
            public string FilePath { get; set; }
            [XmlElement("Extension")]
            public string Extension { get; set; }
            [XmlElement("Age")]
            public string c { get; set; }
            [XmlElement("JobComment")]
            public string JobComment { get; set; }
        }
    
        public partial class amgrid : Window
        {
            public amgrid()
            {
                InitializeComponent();
    
                XmlDocument doc = new XmlDocument();
                string docPath = @"C:\Users\contract_lshamoon\Desktop\arm\arm\arm\xmldb.xml";
                doc.Load(docPath);
                XmlElement root = doc.DocumentElement;
                XmlNodeList elemList = root.GetElementsByTagName("Jobs");
                findAllNodes(root);
                doc.Save(@"C:\Users\contract_lshamoon\Desktop\arm\arm\arm\xmldb.xml");
            }
    
            public void findAllNodes(XmlNode node)
            {
                foreach (XmlNode n in node)
                {
                    JobList jobs = new JobList();
    
                    string job = n.Attributes["JobId"].Value;
                    string date = n.FirstChild.InnerText;
                    string file = n.FirstChild.NextSibling.InnerText;
                    string path = n.FirstChild.NextSibling.NextSibling.InnerText;
                    string extension = n.FirstChild.NextSibling.NextSibling.NextSibling.InnerText;
                    string age = n.FirstChild.NextSibling.NextSibling.NextSibling.NextSibling.InnerText;
                    string comment = n.FirstChild.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.InnerText;
    
                    jobs.Job = job;
                    jobs.JobDate = date;
                    jobs.File = file;
                    jobs.FilePath = path;
                    jobs.Extension = extension;
                    jobs.c = age;
                    jobs.JobComment = comment;
    
                    DG.DataContext = jobs;
                    DG.Items.Add(jobs);
                }
            }
        }
    
            <DataGrid x:Name="DG">
                <DataGrid.DataContext>
                    <local:JobList/>
                </DataGrid.DataContext>
                <DataGrid.Columns>
                    <DataGridTextColumn x:Name="JobCol" Binding="{Binding Job}" Header="Job"/>
                    <DataGridTextColumn x:Name="JobDateCol" Binding="{Binding JobDate}" Header="Date"/>
                    <DataGridTextColumn x:Name="FilePathCol" Binding="{Binding FilePath}" Header="Path"/>
                    <DataGridTextColumn x:Name="ExtensionCol" Binding="{Binding Extension}" Header="Extension"/>
                    <DataGridTextColumn x:Name="AgeCol" Binding="{Binding Age}" Header="Age"/>
                    <DataGridTextColumn x:Name="JobCommentCol" Binding="{Binding JobComment}" Header="Comment"/>
                </DataGrid.Columns>
    
            </DataGrid>