2017-01-11 54 views
0

我得到了一个web应用程序,它包含一个用于存储用户数据的XML文件。我只想根据'txtEmpid.Text在网格视图中显示输入数据”。我认为问题在于字符串阅读器。但我似乎无法弄清楚,因为我是新来的asp.net,这段代码给了我空白页。 感谢您的帮助在Asp.net中过滤和绑定xml数据到gridview c#

我的XML文件:

-<SkillSet> 

    -<SkillSets> 

    <Employee_ID>1</Employee_ID> 

    <Employee_Name>abc</Employee_Name> 

    <PL_Name>xyz</PL_Name> 

    <Skill_Name1>C# with Asp.NET</Skill_Name1> 

    <Skill_Type1>Programming</Skill_Type1> 

    <Skill_Proficiency1>Beginner</Skill_Proficiency1> 

    <Experience1>1</Experience1> 

    <Skill_Name2>FL Studio</Skill_Name2> 

    <Skill_Type2>Others</Skill_Type2> 

    <Skill_Proficiency2>Intermediate</Skill_Proficiency2> 

    <Experience2>2</Experience2> 

    <Skill_Name3>ms word</Skill_Name3> 

    <Skill_Type3>others</Skill_Type3> 

    <Skill_Proficiency3>Advance</Skill_Proficiency3> 

    <Experience3>3</Experience3> 

    <Skill_Name4>Camtasia</Skill_Name4> 

    <Skill_Type4>Others</Skill_Type4> 

    <Skill_Proficiency4>Professional</Skill_Proficiency4> 

    <Experience4>4</Experience4> 

    <Skill_Name5>MS excel</Skill_Name5> 

    <Skill_Type5>Programming</Skill_Type5> 

    <Skill_Proficiency5>Beginner</Skill_Proficiency5> 

    <Experience5>5</Experience5> 

    <Comments>fgfdgdf</Comments> 

    </SkillSets> 

    </SkillSet> 

,这里是具有结合数据的逻辑我的C#文件:

private void BindGrid() 
{ 
    try { 

     var xmlStr = File.ReadAllText(Server.MapPath("~/SkillSet.xml")); 
     var str = XElement.Parse(xmlStr); 
     var result = str.Elements("SkillSets"). 
     Where(x => x.Element("Employee_ID").Value.Equals(txtEmpid.Text)).ToList(); 

     StringReader theReader = new StringReader(result.ToString()); 

     DataSet ds = new DataSet(); 
     ds.ReadXml(theReader); 
     if (ds != null && ds.HasChanges()) 
     { 
      grdxml.DataSource = ds; 
      grdxml.DataBind(); 

     } 
     else 
     { 

      grdxml.DataBind(); 

     } 
    } 

    catch(Exception ex) 
    { 
     lblerror.Text = ex.ToString(); 
    } 

回答

0

试试这个:

string filePath = "Complete path where you saved the XML file";  
    DataSet ds = new DataSet(); 
    ds.ReadXml(filePath);  
    var skillSets = ds.Tables[0].AsEnumerable(); 
    var query = from skillset in skillSets 
       where skillset.Field<string>("Employee_ID") == "1" // here you can get value from text box etc. 
       select skillset; 
    grdxml.DataSource = query.ToList(); 
    grdxml.DataBind(); 
+0

感谢您的回复! 但是逻辑在哪里只显示那个特定员工的记录(这个xml文件将包含数百名员工的记录,显示的记录应该是针对该特定员工的) – panman

+0

@panman检查编辑的代码。 – MMK

0

你LINQ查询很好。在你的代码的问题是在这里:

StringReader theReader = new StringReader(result.ToString()); 
ds.ReadXml(theReader); 

您使用result.ToString()和XElements的列表ToString()表示没有什么可以读取为XML。事实上,呼吁ToString()将导致该

"System.Collections.Generic.List`1[System.Xml.Linq.XElement]" 

正如你所看到的,这不是XML

为您的代码的工作,尝试这样的事情:

try { 

    var xmlStr = File.ReadAllText(Server.MapPath("~/SkillSet.xml")); 
    var str = XElement.Parse(xmlStr); 
    var result = str.Elements("SkillSets"). 
    Where(x => x.Element("Employee_ID").Value.Equals(txtEmpid.Text)).ToList(); 

    grdxml.DataSource = result.ToList(); 
    grdxml.DataBind(); 
} 
catch(Exception ex) 
{ 
    lblerror.Text = ex.ToString(); 
} 

此外,删除您的XML上的斜杠

+0

你是什么意思的斜杠? ,但它似乎并没有工作.. ,但它的工作原理时,我只是调用xml文件中的所有数据绑定到网格 这里是代码: DataSet ds = new DataSet(); ds.ReadXml(Server.MapPath(“〜/ Employees.xml”));如果(ds!= null && ds.HasChanges()) { grdxml.DataSource = ds; grdxml.DataBind(); } 别的 { grdxml.DataBind(); } – panman

+0

@panman斜杠是“ - ”(你的XML示例中有一些)。第二个示例(注释中的示例)适用,因为您传递给ReadXml的参数是有效的XML字符串。在原始示例中,它不起作用,因为您传递的参数是在列表(不是有效的XML字符串)上调用“ToString()”的结果。你的第一个代码抛出一个异常。 我在我给你的代码中看不到问题。你有一些例外吗? –

相关问题