Determine BlogEngine.NET comments that haven't been published

Unfortunately, BlogEngine.NET doesn't currently have a very good way to determine, at a glance, all of the comments that haven't been approved. While this will certainly be coming in a future release, or as an extension, I figured writing something simple to do this would be a good LINQ to XML test for me.

You can download the built executable, or play with the code, which is included below.

Download the executable (7-Zip format). Requires .NET Framework 3.5.

The form I created consisted of a TextBox, Button, and a DataGridView, with the default names.

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Xml.Linq;

namespace TestBlogEngine {
    public partial class Form1 : Form {
        public Form1() {

        private void button1_Click(object sender, EventArgs e) {
            OpenFileDialog sampleFile = new OpenFileDialog();
            sampleFile.Filter = "xml files (*.xml)|*.xml|All files (*.*)|*.*";

            if (sampleFile.ShowDialog() == DialogResult.OK) {
                textBox1.Text = sampleFile.FileName;

                string postsDirectory = System.IO.Path.GetDirectoryName(sampleFile.FileName);

                string[] postFiles = System.IO.Directory.GetFiles(postsDirectory);

                DataTable comments = new DataTable();

                XDocument postXml;

                foreach (string postFile in postFiles) {
                    postXml = XDocument.Load(postFile);

                    var posts = from postData in postXml.Descendants("post")
                        select new {
                            Title = postData.Element("title").Value,
                            CommentItems = (from commentItems in postData.Element("comments").Elements("comment")
                                select commentItems).ToList()

                    foreach (var post in posts) {
                        if (post.CommentItems.Count > 0) {
                            foreach (var commentItem in post.CommentItems) {
                                if (commentItem.Attribute("approved") != null && commentItem.Attribute("approved").Value == "False") {
                                    DataRow comment = comments.NewRow();
                                    comment["Post"] = post.Title;
                                    comment["CommentApproved"] = commentItem.Attribute("approved").Value;
                                    comment["FileId"] = "/post.aspx?id=" + System.IO.Path.GetFileNameWithoutExtension(postFile);


                postXml = null;

                dataGridView1.DataSource = comments;


EDIT: Scott Guthrie's excellent Using LINQ to XML (and how to build a custom RSS Feed Reader with it) is the article that I keep going back to when I forget LINQ to XML basics.