Asp.net Dropdownlist过滤器内部详细信息视图

Asp.net Dropdownlist过滤器内部详细信息视图,asp.net,vb.net,entitydatasource,Asp.net,Vb.net,Entitydatasource,我在插入项目模板视图中有一个下拉列表(非常长,超过100个项目),用于查看详细信息。我想添加一个文本框和按钮(搜索功能),这样我可以过滤这个列表,但我得到以下错误 诸如Eval()、XPath()和Bind()之类的数据绑定方法只能是 在数据绑定控件的上下文中使用 我创建了两个实体数据源,一个带有where子句,另一个不带where子句。当我点击搜索时,代码隐藏(按钮点击事件)将数据源切换到带有where子句和参数的数据源,但我得到了上面的错误。关于如何着手做这件事有什么建议吗 Dim aa A

我在插入项目模板视图中有一个下拉列表(非常长,超过100个项目),用于查看详细信息。我想添加一个文本框和按钮(搜索功能),这样我可以过滤这个列表,但我得到以下错误

诸如Eval()、XPath()和Bind()之类的数据绑定方法只能是 在数据绑定控件的上下文中使用

我创建了两个实体数据源,一个带有where子句,另一个不带where子句。当我点击搜索时,代码隐藏(按钮点击事件)将数据源切换到带有where子句和参数的数据源,但我得到了上面的错误。关于如何着手做这件事有什么建议吗

Dim aa As DropDownList = DetailsView1.FindControl("DropDownList1")
 aa.DataSourceID = ""
 aa.DataSource = EmpPersonalInfoLOV1   
 aa.DataBind()
编辑 将aa.DataSource从字符串更改为EmpPersonalInfoLOV1(数据源的名称)

编辑#2 用户请求的更多信息

数据源#1代码

<asp:EntityDataSource ID="EmpPersonalInfoLOV" runat="server" 
                    ConnectionString="name=sspEntities" DefaultContainerName="sspEntities" 
                    EnableFlattening="False" EntitySetName="Employee_Personal_Info" 
                    EntityTypeFilter="" 
                    Select="it.[Emp_id], it.[Employee_No_FastPay], it.[Surname] + ' '+ it.[Firstname] As FullName" 
                    Where="">
                </asp:EntityDataSource> 

数据源#2代码

<asp:EntityDataSource ID="EmpPersonalInfoLOV1" runat="server" 
                    ConnectionString="name=sspEntities" DefaultContainerName="sspEntities" 
                    EnableFlattening="False" EntitySetName="Employee_Personal_Info" 
                    Select="it.[Emp_id], it.[Employee_No_FastPay], it.[Surname] + ' '+ it.[Firstname] As FullName" 
                    Where="it.Surname like '%' + @Name + '%'">
                    <WhereParameters>
                        <asp:ControlParameter ControlID="TxtBx1" DbType="String" 
                            DefaultValue="&quot;&quot;" Name="Name"  PropertyName="SelectedValue" />
                    </WhereParameters>
                </asp:EntityDataSource>

您似乎没有在
EntityDataSource
上使用正确的
属性名称。由于您是从文本框中获取值,因此您获取的属性是文本。试试这个:

<asp:EntityDataSource ID="EmpPersonalInfoLOV1" runat="server" 
                ConnectionString="name=sspEntities" DefaultContainerName="sspEntities" 
                EnableFlattening="False" EntitySetName="Employee_Personal_Info" 
                Select="it.[Emp_id], it.[Employee_No_FastPay], it.[Surname] + ' '+ it.[Firstname] As FullName" 
                Where="it.Surname like '%' + @Name + '%'">
                <WhereParameters>
                    <asp:ControlParameter ControlID="TxtBx1" DbType="String" Type="String" DefaultValue="" Name="Name" PropertyName="Text" />
                </WhereParameters>
</asp:EntityDataSource>


另外,在where子句中使用like时,实际上不需要两个数据对象。当文本框为空时,查询将选择全部。

我已经有一段时间没有这样做了,但我相信
数据源
应该是一个对象而不是字符串?我如何创建实体数据源和对象。对不起,我是新来的,任何帮助都将不胜感激。谢谢您正在将aa.DataSource设置为字符串值。您应该将其设置为实际的数据源对象,但仍然会出现相同的错误。。它不起作用。你说你有两个实体数据源。我假设DS2是datasouce的ID,但您需要的是对象,而不仅仅是ID为的字符串。因此,删除引号可能会更好。设置DbType属性时无法设置参数“Name”的Type属性。我认为数据源不是问题所在。如果我创建了第一个DS的副本并尝试将其切换到副本,仍然会给出错误。我认为这与databind()方法有关。好吧,我会选择Type,但更重要的区别是PropertyName。我仍在使用Eval()、XPath()和Bind()等数据绑定方法,这些方法只能在数据绑定控件的上下文中使用。抱歉,我没有主意。您可以尝试更改为objectdatasource而不是entitydatasource。我在某个地方读到其他ppl与EDS有问题。