我有一个Employees的XML数据,我想解析这些数据,并在ASP.NET中使用C#在Gridview中显示它。
根据员工ID或公司ID或部门ID等搜索参数,我应该能够过滤数据并更新GridView。
在互联网上检查了几个链接,但没有任何内容符合这种特殊格式..是否有可能实现..(任何链接)代码都会有所帮助。
<?xml version="1.0" encoding="utf-8"?>
<Employees>
<Employee>
<Id> TG18-2002</Id>
<Name> AAPM^Test^Patterns</Name>
<Sex> O </Sex>
<Company>
<Id> 2.16</Id>
<Department>
<Id> 2.16.124</Id>
<Project>
<Id> 2.16.124.113543</Id>
</Project>
</Department>
</Company>
</Employee>
<Employee>
<ID> TG18-2003</ID>
<Name> AAPM^Test^Patt</Name>
<Sex> O </Sex>
<Company>
<ID> 2.16</ID>
<Department>
<ID> 2.16.124</ID>
<Project>
<ID> 2.16.124.113543</ID>
</Project>
</Department>
</Company>
</Employee>
<Employee>
</Employees>
注意:我正在尝试构建类似this
的内容答案 0 :(得分:1)
查看您引用的链接,我认为您最好创建一个Employee类并使用XML数据填充它。
这将允许您从您的视图中解析您的数据(在本例中为XML,但可能是任何内容)(在本例中为ASP.NET Web Forms,但也可以是任何内容),我觉得这很方便这些天很常见(MVVM等)。
另一个好处是,您可以将嵌套数据源(如XML)变得更加平坦,以使视图绑定更简单,例如,在您提供的示例中,您可以将公司字段作为外部Employee类的属性。
另一个好处是,如果/当您的视图变为响应时,您可以使视图模型的属性可观察,从而允许更新模型,立即更新您的视图。
所有这一切,这是一个显示您的Employee类的小片段,并从您提供的XML示例中填充它。我正在使用Linq to XML,但有很多方法可以做到这一点(适配器,读卡器,导航器......)。
我认为重要的是你要从视图中分离数据。
class Employee
{
public string Id { get; set; }
public string Name { get; set; }
public string Sex { get; set; }
public Company Company { get; set; }
}
class Company
{
public string Id { get; set; }
public Department Department { get; set; }
}
class Department
{
public string Id { get; set; }
public Project Project { get; set; }
}
class Project
{
public string Id { get; set; }
}
var xml = @"<?xml version='1.0' encoding='utf-8'?>
<Employees>
<Employee>
<Id> TG18-2002</Id>
<Name> AAPM^Test^Patterns</Name>
<Sex> O </Sex>
<Company>
<Id> 2.16</Id>
<Department>
<Id> 2.16.124</Id>
<Project>
<Id> 2.16.124.113543</Id>
</Project>
</Department>
</Company>
</Employee>
<Employee>
<Id> TG18-2003</Id>
<Name> AAPM^Test^Patt</Name>
<Sex> O </Sex>
<Company>
<Id> 2.16</Id>
<Department>
<Id> 2.16.124</Id>
<Project>
<Id> 2.16.124.113543</Id>
</Project>
</Department>
</Company>
</Employee>
</Employees>
";
// read the xml into the class
var doc = XDocument.Parse(xml);
var data = (from row in doc.Root.Elements("Employee")
let company = row.Element("Company")
let dept = company.Element("Department")
let project = dept.Element("Project")
select new Employee
{
Id = row.Element("Id").Value.Trim(),
Name = row.Element("Name").Value.Trim(),
Sex = row.Element("Sex").Value.Trim(),
Company = new Company
{
Id = company.Element("Id").Value.Trim(),
Department = new Department
{
Id = dept.Element("Id").Value.Trim(),
Project = new Project
{
Id = project.Element("Id").Value.Trim()
}
}
}
});
// now you have a collection of 'employees', bind them..
到目前为止,您需要决定如何查询数据。这个问题的答案与往常一样,取决于它,在这种情况下,我认为这主要取决于你拥有的XML数据的大小,以及是否将它带入内存是否有意义。
如果你可以将它带入内存,那么使用Linq查询Employees很好很简单,我会推荐这种方法。
如果XML很大,那么您可能需要使用XMLReader来构建您的类。稍微复杂一些,但结果仍然是您将网格绑定到类并将XML与视图分开。
答案 1 :(得分:0)
DataSet xmlData = new DataSet();
xmlData.ReadXml(YourXMLPath);
GridviewControl1.DataSource = xmlData.Tables[0];
答案 2 :(得分:0)
据我所知,您需要在数据中进行maipulication,然后再在Grid Control中显示它。
为此我建议你使用LINQ查询。你可以通过查询操纵客户端的东西。 下面我试图解决问题。
DataSet xmlData = new DataSet();
xmlData.ReadXml(YourXMLPath);
DataTable dt =From x in xmlData.Tables[0].AsEnumerable().Where(x=>x.Field<string>("Name").StartWith("A")) Selct(x=>x).CopytodDataTable;
现在你可以使用&#34; dt&#34;对于您的数据网格
xmlData.Tables[0]= dt;
GridviewControl1.DataSource = xmlData.Tables[0];
GridviewControl1.DataBind();//this line required if it is for asp.net
希望它会对你有所帮助。 :)