我有一个继承了一个带有Gridview的Web窗体应用程序。网格视图列出了许多分配给它们的审计员和成本。在页脚模板中有空白文本框,允许用户向网格添加新条目。第一列包含审核员的名称,其中使用jQuery UI Autocomplete帮助用户添加审核员名称。
我遇到的问题是自动完成功能完全适用于添加的第一行。但是,如果用户希望在第一个记录之后添加多个记录,则自动完成功能将不起作用。
为了描绘一切是如何工作的全貌,自动填充数据被加载到隐藏字段
private void BindAuditorAutoComplete()
{
var data = RetrievalProcedures.GetAuditors();
hdAuditorData.Value = JsonObjectSerializer.ParseAuditorAutoComplete(data);
}
这里是GridView的相关列 - 注意两个隐藏字段,第一个是DB记录ID(如果是编辑记录),第二个是所选审计员的ID值自动完成。
<asp:TemplateField HeaderText="Auditor Name">
<HeaderStyle Width="315" />
<ItemStyle Width="315" />
<ItemTemplate>
<asp:Label ID="lblExtraAuditorName" runat="server" Text='<%# Bind("ExtraAuditorName")%>'></asp:Label>
</ItemTemplate>
<EditItemTemplate>
<asp:Label ID="lblExtraAuditorName" runat="server" Text='<%# Bind("ExtraAuditorName")%>'></asp:Label>
<uc:HiddenField2 ID="txtExtraAdditionalAuditorId" runat="server" Value='<%# Bind("ExtraAdditionalAuditorId")%>' />
<uc:HiddenField2 ID="txtExtraAuditorId" runat="server" Value='<%# Bind("ExtraAuditorId")%>' />
</EditItemTemplate>
<FooterTemplate>
<uc:HiddenField2 ID="txtExtraAdditionalAuditorId" runat="server" Value='<%# Bind("ExtraAdditionalAuditorId")%>' />
<uc:HiddenField2 ID="txtExtraAuditorId" runat="server" />
<asp:TextBox ID="txtExtraAuditorName" class="dummyAuditorAutoComplete" runat="server" Style="width: 305px;"></asp:TextBox>
</FooterTemplate>
</asp:TemplateField>
这是加载自动完成的代码:
function LoadAuditorExtraCostsAutoComplete() {
$('.dummyAuditorAutoComplete').autocomplete({
source: GetAuditorData(),
select: function (event, ui) {
PopulateAdditionalCostsAuditorData(ui);
return false;
},
focus: function (event, ui) {
PopulateAdditionalCostsAuditorData(ui);
return false;
},
minLength: 1
});
}
GetAuditorData()只读取隐藏的字段值:
function GetAuditorData() {
var auditors = eval($("#<%=hdAuditorData.ClientID%>").val());
return auditors;
}
在select和focus事件中,运行以下函数:
function PopulateAdditionalCostsAuditorData(ui) {
$("#cphDetails_AdditionalCostsGrid_txtExtraAuditorName").val(ui.item.Name);
$("#cphDetails_AdditionalCostsGrid_txtExtraAuditorId").val(ui.item.Id);
}
注意:我知道在引用这两个字段时我可能应该使用服务器标记,但是Visual Studio给出了错误,告知txtExtraAuditorName / txtExtraAuditorId在当前上下文中不存在。问题可能与此有关,但我不确定如何解决它。
是否有人能够提供帮助,以便用户在添加一条记录后可以再次使用自动完成功能?提前谢谢!
答案 0 :(得分:0)
对于那些想知道的人(如果有的话),在后面的代码中我有一个方法PopulateAdditionalCost(),每次添加或更改记录时都会调用它。我只是在其底部添加以下代码以重新加载自动完成控件
ScriptManager.RegisterClientScriptBlock(this.Page, this.Page.GetType(), "myscr", "LoadAuditorExtraCostsAutoComplete();", true);