我在尝试动态更改 SelectCommand 内容时遇到问题。
有一个 Telerik 搜索框控件,它使用 SQLDataSource 不断地通过选择查询来敲击数据库,并显示由您的输入过滤的单词列表。然后,如果您从列表中选择一个条目,它将成为“令牌”,然后您可以再次开始输入。
就我而言,查询应返回汽车制造商列表,初始查询为:
SELECT DISTINCT mfrname
FROM Manufacturers
WHERE mfrname IS NOT NULL
ORDER BY mfrname
因此,如果我键入“Che”,它将显示“Checker”和“Chevrolet”。因此,如果我单击“雪佛兰”,它将成为一个令牌,并且我的输入被重置,因此我可以再次开始输入。
在生成令牌后出于测试目的,我将查询更改为:
SELECT DISTINCT mfrname
FROM manufacturers
WHERE mfrname IS NOT NULL and mfrname like 'm%'
ORDER BY mfrname
请注意,现在它应该只选择以“M”开头的汽车,例如“Mercedes”、“Maseratti”等,所以如果我输入其他不以“M”开头的内容,它不应该显示任何内容。
但是,如果我在那里键入“Che”,它又是“Checker”和“Chevrolet”,清楚地表明它仍在使用初始查询而不是新查询。
好的,我知道正在触发事件并且正在更改 SelectCommand 值(我知道这一点是因为我添加了一个更改并显示新值的标签)。我不知道为什么控件坚持使用旧查询而不是新查询!任何的想法?
我的代码前面:
<form id="form1" runat="server">
<telerik:RadScriptManager runat="server" ID="RadScriptManager1" />
<telerik:RadAutoCompleteBox RenderMode="Lightweight" runat="server" ID="RadAutoCompleteBox1" autopostback="true" EmptyMessage="Type in car make..."
DataSourceID="SqlDataSource1" DataTextField="mfrname" InputType="Token" Width="450" DropDownWidth="150px" OnEntryAdded="RadAutoCompleteBox1_EntryAdded" >
</telerik:RadAutoCompleteBox>
<asp:SqlDataSource runat="server" ID="SqlDataSource1" CancelSelectOnNullParameter="false" ConnectionString="<%$ ConnectionStrings:MyConn %>" SelectCommand="SELECT DISTINCT mfrname FROM Manufacturers WHERE mfrname IS NOT NULL ORDER BY mfrname">
</asp:SqlDataSource>
<div>
<br />
<asp:label id="label1" runat="server">Waiting for update...</asp:label>
</div>
</form>
我背后的代码:
Protected Sub RadAutoCompleteBox1_EntryAdded(sender As Object, e As Telerik.Web.UI.AutoCompleteEntryEventArgs)
SqlDataSource1.SelectCommand = "SELECT DISTINCT mfrname FROM manufacturers WHERE mfrname IS NOT NULL and mfrname like 'm%' ORDER BY mfrname"
RadAutoCompleteBox1.DataBind()
label1.Text = e.Entry.Text + " was added. (" + SqlDataSource1.SelectCommand + ")"
End Sub