Asp.net 将QueryXtender与EntityDataSource一起使用时出错-“FirstName”不是“System.Data.Common.DbDatRecord”类型的成员
下面的GridView带有EntityDataSource,它从包含更多字段的Surveyors表中获取了3个字段,当然它向我展示了每个SurveyorsAsp.net 将QueryXtender与EntityDataSource一起使用时出错-“FirstName”不是“System.Data.Common.DbDatRecord”类型的成员,asp.net,c#-4.0,entitydatasource,Asp.net,C# 4.0,Entitydatasource,下面的GridView带有EntityDataSource,它从包含更多字段的Surveyors表中获取了3个字段,当然它向我展示了每个Surveyors <asp:GridView ID="gvwSurveyors" runat="server" AllowPaging="True" AllowSorting="True" AutoGenerateColumns="False" CellPadding="3" DataSourceID="edsSurveyors"> <C
<asp:GridView ID="gvwSurveyors" runat="server" AllowPaging="True" AllowSorting="True" AutoGenerateColumns="False" CellPadding="3" DataSourceID="edsSurveyors">
<Columns>
<asp:BoundField DataField="FirstName" HeaderText="FirstName" ReadOnly="True" SortExpression="FirstName" />
<asp:BoundField DataField="LastName" HeaderText="LastName" ReadOnly="True" SortExpression="LastName" />
<asp:BoundField DataField="ID" HeaderText="ID" ReadOnly="True" SortExpression="ID" />
</Columns>
</asp:GridView>
<asp:EntityDataSource ID="edsSurveyors" runat="server"
ConnectionString="name=PLSOEntities"
DefaultContainerName="PLSOEntities"
EnableFlattening="False"
EntitySetName="Surveyors"
Select="it.[FirstName], it.[LastName], it.[ID]"
AutoGenerateOrderByClause="true">
<OrderByParameters>
<asp:Parameter DefaultValue="LastName" />
</OrderByParameters>
</asp:EntityDataSource>
我有两个名为txtFirstName和txtLastName的文本框,我希望用户能够使用类似SQL查询的样式进行搜索。网上的一些阅读资料将我引向了QueryXtender。我将代码更改为以下内容:
<asp:GridView ID="gvwSurveyors" runat="server" AllowPaging="True" AllowSorting="True" AutoGenerateColumns="False" CellPadding="3" DataSourceID="edsSurveyors">
<Columns>
<asp:BoundField DataField="FirstName" HeaderText="FirstName" ReadOnly="True" SortExpression="FirstName" />
<asp:BoundField DataField="LastName" HeaderText="LastName" ReadOnly="True" SortExpression="LastName" />
<asp:BoundField DataField="ID" HeaderText="ID" ReadOnly="True" SortExpression="ID" />
</Columns>
</asp:GridView>
<asp:EntityDataSource ID="edsSurveyors" runat="server"
ConnectionString="name=PLSOEntities"
DefaultContainerName="PLSOEntities"
EnableFlattening="False"
EntitySetName="Surveyors"
Select="it.[FirstName], it.[LastName], it.[ID]"
AutoGenerateOrderByClause="true" onselecting="edsSurveyors_Selecting">
<OrderByParameters>
<asp:Parameter DefaultValue="LastName" />
</OrderByParameters>
</asp:EntityDataSource>
<asp:QueryExtender ID="qexSurveyor" runat="server" TargetControlID="edsSurveyors">
<asp:SearchExpression SearchType="Contains" DataFields="FirstName">
<asp:ControlParameter ControlID="txtFirstName" />
</asp:SearchExpression>
</asp:QueryExtender>
因此,现在当我单击按钮时,会出现错误:“FirstName”不是“System.Data.Common.DbDataRecord”类型的成员
我可以做些什么来允许包含?一旦它起作用,我将添加一个LastName参数,该参数也会起作用。我目前遇到同样的问题,我发现如果我从EntityDataSource中删除'Select=',它就会起作用。显然,在使用QueryXtender时,您必须选择“全部”。然而,我不想返回表中的每个字段,我还没有找到解决这个问题的方法
那么,有人有解决办法吗?我在使用AdventureWorks作为数据源时也遇到了同样的问题。我必须从EntityDataSource中删除“Select=”。为了解决这个问题,我转到我的GridView并将AutoGenerateColumns设置为False。然后我手动添加了我想在Gridview中显示的每一列,例如
<asp:BoundField DataField="CustomerID" HeaderText="Customer ID" />
<asp:BoundField DataField="SalesPerson" HeaderText="Sales Person" />
<asp:BoundField DataField="CustomerID" HeaderText="Customer ID" />
<asp:BoundField DataField="FirstName" HeaderText="First Name" />
<asp:BoundField DataField="LastName" HeaderText="Last Name" />
<asp:BoundField DataField="CompanyName" HeaderText="Company Name" />
<asp:BoundField DataField="EmailAddress" HeaderText="Email Address" />
<asp:BoundField DataField="Phone" HeaderText="Phone" />
另一个注意事项是,另一个解决方法似乎是使用onquerycreated事件将LINQ查询应用于EntityDataSource,尽管是通过编程实现的。在这种情况下,您不需要声明性地使用查询扩展程序。全文在此->
<asp:BoundField DataField="CustomerID" HeaderText="Customer ID" />
<asp:BoundField DataField="SalesPerson" HeaderText="Sales Person" />
<asp:BoundField DataField="CustomerID" HeaderText="Customer ID" />
<asp:BoundField DataField="FirstName" HeaderText="First Name" />
<asp:BoundField DataField="LastName" HeaderText="Last Name" />
<asp:BoundField DataField="CompanyName" HeaderText="Company Name" />
<asp:BoundField DataField="EmailAddress" HeaderText="Email Address" />
<asp:BoundField DataField="Phone" HeaderText="Phone" />