従業員のデータを含む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
'emplid'は何ですか? – RandomStranger
emplidは、従業員が自分のIDを入力するテキストボックスのデータを格納するローカル変数です – panman
@panman 'query'には何が入っていますか? –