是在参看了这篇文章 后 觉得不错,然后修改成用linq方法来实现的,全部代码如下
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Animation;
using System.Windows.Shapes;
using System.Xml.Linq;
namespace webStudy
{
public partial class XML2DataGird : UserControl
{
public XML2DataGird()
{
InitializeComponent();
string XMLStr = @"
<NewDataSet>
<Table TableName='City' TableShowName='城市' >
<Column Name='CityName' ShowName='城市名称' />
<Column Name='CityTel' ShowName='城市区号' />
<Column Name='CityCounty' ShowName='城市所属国家' />
</Table>
<Table TableName='User' TableShowName='用户' >
<Column Name='UserName' ShowName='用户名' />
<Column Name='UserPwd' ShowName='用户密码' />
<Column Name='UserTel' ShowName='用户电话' />
<Column Name='UserEmail' ShowName='用户邮箱' />
</Table>
</NewDataSet>";
XDocument doc = XDocument.Parse(XMLStr);
var Element = from t in doc.Descendants("Table")
select new entityTable
{
tableName = t.Attribute("TableName").Value,
tableShowName = t.Attribute("TableShowName").Value,
eColumns = from c in t.Descendants("Column")
select new entityColumn
{
name = c.Attribute("Name").Value,
showName = c.Attribute("ShowName").Value
},
};
foreach (var item in Element)
{
DataGrid dgrid = new DataGrid();
dgrid.HorizontalAlignment = HorizontalAlignment.Left;
dgrid.VerticalAlignment = VerticalAlignment.Top;
dgrid.Margin = new Thickness(20, 5, 0, 0);
dgrid.Width = 960;
dgrid.Name = item.tableName;
foreach (var item1 in item.eColumns)
{
DataGridTextColumn col = new DataGridTextColumn();
col.Header = item1.showName;
dgrid.Columns.Add(col);
}
mainPanel.Children.Add(dgrid);
}
}
}
public class entityTable
{
public string tableName { get; set; }
public string tableShowName { get; set; }
public IEnumerable<entityColumn> eColumns { get; set; }
}
public class entityColumn
{
public string name { get; set; }
public string showName { get; set; }
}
}