2017-01-12 4 views
0

従業員のデータを含むXMLファイルがあります。私のページのデザインは、ユーザーが自分のIDを入力すると、グリッドビューはスキル(すでに存在する場合)を表示し、何も表示せずに自分のデータ(新入社員)を入力するようになります。私は彼のIDを使用して従業員のデータを記録し、グリッドビューで表示したいと思います。しかし、私のコードを使用すると、「 'System.Data.DataRow'に 'EmployeeID'という名前のプロパティが含まれていません」という例外がスローされます。私はすでに正しい値でテンプレートを境界しています。何が問題なのでしょう?xmlファイルからgridview asp.netに特定のレコードをフィルタリングします。

私のXMLスキーマ

-<SkillSet> 


-<SkillSets> 

<EmployeeID>1</EmployeeID> 

<EmployeeName>abc</EmployeeName> 

<PLName>xyz</PLName> 

<SkillName1>Html</SkillName1> 

<SkillType1>Programming</SkillType1> 

<SkillProficiency1>Beginner</SkillProficiency1> 

<Experience1>1</Experience1> 

<Comments>Hello</Comments> 

</SkillSets> 

</SkillSet> 

私のaspxページのソースコード:

<asp:GridView ID="grdxml" runat="server" AutoGenerateColumns="False" BackColor="White" 
         BorderColor="Black" BorderStyle="None" BorderWidth="1px" CellPadding="1" GridLines="Vertical" 
         OnSelectedIndexChanged="grdxml_SelectedIndexChanged" 
         onrowdeleting="grdxml_RowDeleting"> 
         <AlternatingRowStyle BackColor="#DCDCDC" /> 
         <Columns> 
          <asp:TemplateField HeaderText="ID"> 
           <ItemTemplate> 
            <asp:Label ID="lblEmpId" runat="server" Text='<%# Bind("EmployeeID")%>'></asp:Label> 
           </ItemTemplate> 
          </asp:TemplateField> 
          <asp:TemplateField HeaderText="Name"> 
           <ItemTemplate> 
            <asp:Label ID="lblEmpName" runat="server" Text='<%# Bind("EmployeeName")%>'></asp:Label> 
           </ItemTemplate> 
          </asp:TemplateField> 
          <asp:TemplateField HeaderText="PL Name"> 
           <ItemTemplate> 
            <asp:Label ID="lblPLName" runat="server" Text='<%# Bind("PLName")%>'></asp:Label> 
           </ItemTemplate> 
          </asp:TemplateField> 
          <asp:TemplateField HeaderText="Skill Name 1"> 
           <ItemTemplate> 
            <asp:Label ID="lblSkillName1" runat="server" Text='<%# Bind("SkillName1")%>'></asp:Label> 
           </ItemTemplate> 
          </asp:TemplateField> 
          <asp:TemplateField HeaderText="Skill Type 1"> 
           <ItemTemplate> 
            <asp:Label ID="lblSkillType1" runat="server" Text='<%# Bind("SkillType1")%>'></asp:Label> 
           </ItemTemplate> 
          </asp:TemplateField> 
          <asp:TemplateField HeaderText="Skill Proficiency 1"> 
           <ItemTemplate> 
            <asp:Label ID="lblSkillProf1" runat="server" Text='<%# Bind("SkillProficiency1")%>'></asp:Label> 
           </ItemTemplate> 
          </asp:TemplateField> 
          <asp:TemplateField HeaderText="Experience"> 
           <ItemTemplate> 
            <asp:Label ID="lblExp1" runat="server" Text='<%# Bind("Experience1")%>'></asp:Label> 
           </ItemTemplate> 
          </asp:TemplateField> 
<asp:TemplateField HeaderText="Command"> <ItemTemplate> 
            <asp:LinkButton Text="Select" ID="lnkSelect" runat="server" CommandName="Select" /> 
            <asp:LinkButton ID="lnkDelete" runat="server" CommandName="delete">Delete</asp:LinkButton> 
           </ItemTemplate> 
          </asp:TemplateField> 
         </Columns>      
        </asp:GridView> 

結合グリッドのための私のC#コード:

private void BindGrid() 
    { 

     string filename = Server.MapPath("~/SkillSet.xml"); 

     if (File.Exists(filename) == true) 
     { 
      try 
      { 

       string filePath = Server.MapPath("SkillSet.xml"); 
       DataSet ds = new DataSet(); 
       ds.ReadXml(filePath); 
       var skillSets = ds.Tables[0].AsEnumerable(); 
       var query = from SkillSets in skillSets 
          where SkillSets.Field<string>("EmployeeID") == emplid 
          select SkillSets; 
       grdxml.DataSource = query.ToList(); 
       grdxml.DataBind(); 
      } 
      catch (Exception ex) 
      { 
       lblerror.Text = ex.ToString(); 
      } 
     } 
    } 

フルスタックトレース:

System.Web.HttpException (0x80004005): DataBinding: 'System.Data.DataRow' does not contain a property with the name 'EmployeeID'. at System.Web.UI.DataBinder.GetPropertyValue(Object container, String propName) at System.Web.UI.DataBinder.Eval(Object container, String[] expressionParts) at System.Web.UI.DataBinder.Eval(Object container, String expression) at System.Web.UI.TemplateControl.Eval(String expression) at ASP.default_aspx.__DataBinding__control130(Object sender, EventArgs e) in c:\Users\SkillSet\Default.aspx:line 230 at System.Web.UI.Control.OnDataBinding(EventArgs e) at System.Web.UI.Control.DataBind(Boolean raiseOnDataBinding) at System.Web.UI.Control.DataBind() at System.Web.UI.Control.DataBindChildren() at System.Web.UI.Control.DataBind(Boolean raiseOnDataBinding) at System.Web.UI.Control.DataBind() at System.Web.UI.Control.DataBindChildren() at System.Web.UI.Control.DataBind(Boolean raiseOnDataBinding) at System.Web.UI.Control.DataBind() at System.Web.UI.WebControls.GridView.CreateRow(Int32 rowIndex, Int32 dataSourceIndex, DataControlRowType rowType, DataControlRowState rowState, Boolean dataBind, Object dataItem, DataControlField[] fields, TableRowCollection rows, PagedDataSource pagedDataSource) at System.Web.UI.WebControls.GridView.CreateChildControls(IEnumerable dataSource, Boolean dataBinding) at System.Web.UI.WebControls.CompositeDataBoundControl.PerformDataBinding(IEnumerable data) at System.Web.UI.WebControls.GridView.PerformDataBinding(IEnumerable data) at System.Web.UI.WebControls.DataBoundControl.OnDataSourceViewSelectCallback(IEnumerable data) at System.Web.UI.DataSourceView.Select(DataSourceSelectArguments arguments, DataSourceViewSelectCallback callback) at System.Web.UI.WebControls.DataBoundControl.PerformSelect() at System.Web.UI.WebControls.BaseDataBoundControl.DataBind() at System.Web.UI.WebControls.GridView.DataBind() at _Default.BindGrid() in c:\Users\SkillSet\Default.aspx.cs:line 366 
+0

'emplid'は何ですか? – RandomStranger

+0

emplidは、従業員が自分のIDを入力するテキストボックスのデータを格納するローカル変数です – panman

+0

@panman 'query'には何が入っていますか? –

答えて

1

私はこれをテストし、その正常に動作しています

var xmlStr = File.ReadAllText(Server.MapPath("YourFileName.xml")); 
var str = XElement.Parse(xmlStr); 
var result = str.Elements("SkillSets").Where(x => x.Element("EmployeeID").Value.Equals(emplid.ToString())).ToList();  
List<Employee> mapList = new List<Employee>(); 
foreach (var item in result) 
{ 
    Employee obj = new Employee(); 
    obj.EmployeeID = item.Element("EmployeeID").Value; 
    obj.EmployeeName = item.Element("EmployeeName").Value; 
    obj.PLName = item.Element("PLName").Value; 
    obj.SkillName1 = item.Element("SkillName1").Value; 
    obj.SkillType1 = item.Element("SkillType1").Value; 
    obj.SkillProficiency1 = item.Element("SkillProficiency1").Value; 
    obj.Experience1 = item.Element("Experience1").Value; 
    obj.Comments = item.Element("Comments").Value; 
    mapList.Add(obj); 
} 

grdxml.DataSource = mapList; 
grdxml.DataBind(); 

そして、あなたはEmployeeのクラスを作成することができます。

public class Employee 
    { 
    private string _EmployeeID; 
    public string EmployeeID 
    { 
     get 
     { 
      return _EmployeeID; 
     } 
     set 
     { 
      _EmployeeID = value; 
     } 

    } 
    private string _EmployeeName; 
    public string EmployeeName 
    { 
     get 
     { 
      return _EmployeeName; 
     } 
     set 
     { 
      _EmployeeName = value; 
     } 
    } 
    private string _PLName; 
    public string PLName 
    { 
     get 
     { 
      return _PLName; 
     } 
     set 
     { 
      _PLName = value; 
     } 
    } 

    private string _SkillName1; 
    public string SkillName1 
    { 
     get 
     { 
      return _SkillName1; 
     } 
     set 
     { 
      _SkillName1 = value; 
     } 
    } 

    private string _SkillType1; 
    public string SkillType1 
    { 
     get 
     { 
      return _SkillType1; 
     } 
     set 
     { 
      _SkillType1 = value; 
     } 
    } 

    private string _SkillProficiency1; 
    public string SkillProficiency1 
    { 
     get 
     { 
      return _SkillProficiency1; 
     } 
     set 
     { 
      _SkillProficiency1 = value; 
     } 
    } 

    private string _Experience1; 
    public string Experience1 
    { 
     get 
     { 
      return _Experience1; 
     } 
     set 
     { 
      _Experience1 = value; 
     } 
    } 

    private string _Comments; 
    public string Comments 
    { 
     get 
     { 
      return _Comments; 
     } 
     set 
     { 
      _Comments = value; 
     } 
    } 
} 
+0

返信いただきありがとうございます。私はそれを実装し、結果を更新しようとします:) – panman

+0

私はそれを使用し、それを働かせました。あなたの助けを借りて大変ありがとうございます。 – panman

関連する問題