【问题标题】:Dropdownlist filter inside details view详细信息视图中的下拉列表过滤器
【发布时间】:2013-04-15 19:08:04
【问题描述】:

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

Eval()、XPath() 和 Bind() 等数据绑定方法只能 在数据绑定控件的上下文中使用。

我创建了两个实体数据源,一个带有 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>

【问题讨论】:

  • 我有一段时间没有这样做了,但我相信DataSource 应该是一个对象而不是一个字符串?
  • 如何创建实体数据源和对象。对不起,我是新手,任何帮助将不胜感激。谢谢
  • 您正在将 aa.DataSource 设置为字符串值。您应该将其设置为实际的数据源对象
  • 我仍然得到同样的错误..它没有工作
  • 你说你有两个实体数据源。我假设 DS2 是您的数据源的 ID,但您想要的是对象,而不仅仅是带有 id 的字符串。所以,去掉引号,它可能会更好。

标签: asp.net vb.net entitydatasource


【解决方案1】:

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

<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 时,你真的不需要两个数据对象。当文本框为空时,查询将全选。

【讨论】:

  • 设置DbType属性时,不能设置参数'Name'的Type属性。
  • 我不认为数据源是问题所在。如果我创建第一个 DS 的副本并尝试将其切换到副本..仍然给出错误。我认为这与 databind() 方法有关。
  • 好吧,我会选择 Type,但更重要的区别是 PropertyName。
  • 我仍然得到 数据绑定方法,如 Eval()、XPath() 和 Bind() 只能在数据绑定控件的上下文中使用。跨度>
  • 抱歉,我没办法了。您可以尝试更改为 objectdatasource 而不是 entitydatasource。我在某处读到其他人在 EDS 上遇到过问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-08-10
  • 1970-01-01
相关资源
最近更新 更多