我在1.xml文件中:

<Root>
  <Node PCode="1" FieldName="FulName" Caption="F&LName" FieldValue="John Cary" FieldType="1" />
  <Node PCode="1" FieldName="Funct" Caption="MonthWork" FieldValue="29 days " FieldType="2" />
  <Node PCode="1" FieldName="FType" Caption="Work_Type" FieldValue="daily   " FieldType="2" />
  <Node PCode="1" FieldName="FTime" Caption="ExtraTime" FieldValue="0' : 90 " FieldType="2" />
  <Node PCode="1" FieldName="HTime" Caption="HolidTime" FieldValue="30' : 82" FieldType="2" />
</Root>


在C#后面的代码中:

DataSet ds = new DataSet();
ds.ReadXml(@"d:\1.xml");

DataTable dt = ds.Tables[0];

functionNodes.DataSource =  ds.Tables[0].Select("FieldType = '2'");
functionNodes.DataBind();


并在aspx文件中:

<asp:DataList ID="deductionsNodes" runat="server">
  <ItemTemplate>
    <asp:Label CssClass="itemTopics" runat="server" Text='<%# (Eval("FieldType").Equals("4")) ? Eval("Caption") : "" %>'></asp:Label>   **Error**
    <asp:Label CssClass="itemValues" runat="server" Text='<%# (Eval("FieldType").Equals("4")) ? Eval("FieldValue") : "" %>'></asp:Label>
  </ItemTemplate>
</asp:DataList>


当运行时,当光标到达运行DataBind()方法时,此错误在aspx代码的第一个标签标记中发生,并说:


  DataBinding:'System.Data.DataRow'不包含名称为'Caption'的属性。


我需要使用FieldType=2过滤行以在DataList中使用。

注意:当我删除.Select("FieldType = '2'")方法并仅使用ds.Tables[0];时,
       返回所有FieldTypes的所有行,没有任何错误,但返回所有行。

最佳答案

DataSource希望在绑定到的集合周围有某种形式的DataView。似乎很难将其交给DataRow的原始数组。
一种选择是使用DataTable的DefaultView并利用RowFilter功能:

DataSet ds = new DataSet();
ds.ReadXml(@"d:\1.xml");
DataTable dt = ds.Tables[0];
dt.DefaultView.RowFilter = "FieldType = '2'";

functionNodes.DataSource = dt;
functionNodes.DataBind();


我认为您发布的.aspx对于数据绑定是错误的。在按FieldType = 2进行过滤时,它仅显示FieldType = 4的项目。这将始终是空的。

关于c# - 数据绑定(bind):“System.Data.DataRow”不包含名称为“标题”的属性,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/23573769/

10-10 11:40