jQuery UI自动完成 - ASP GridView
问题描述:
我有一个GridView应用程序的GridView继承。网格视图列出了许多审计员和分配给他们的成本。页脚模板中有空白文本框,允许用户向网格中添加新条目。第一列包含审计人员的姓名,其中使用jQuery UI自动完成来帮助用户添加审计员姓名。jQuery UI自动完成 - ASP GridView
我遇到的问题是自动完成对于第一行的添加完美。但是如果用户希望在第一个记录之后添加多个记录,那么自动完成功能将不起作用。
作画它是如何工作的全貌,自动完成数据装载到一个隐藏字段
private void BindAuditorAutoComplete()
{
var data = RetrievalProcedures.GetAuditors();
hdAuditorData.Value = JsonObjectSerializer.ParseAuditorAutoComplete(data);
}
这里是GridView的相关列 - 注意两个隐藏字段,以及,第一用于数据库记录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;
}
上的选择和焦点事件时,以下功能运行:
function PopulateAdditionalCostsAuditorData(ui) {
$("#cphDetails_AdditionalCostsGrid_txtExtraAuditorName").val(ui.item.Name);
$("#cphDetails_AdditionalCostsGrid_txtExtraAuditorId").val(ui.item.Id);
}
注意:我知道我可能应该在引用这两个字段时使用服务器标记,但是Visual Studio给了我错误,建议txtExtraAuditorName/txtExtraAuditorId在当前上下文中不存在。这个问题可能与此有关,但我不知道如何解决它。
是否有人能够协助,以便用户可以在添加一条记录后再次使用自动完成功能?提前致谢!
答
对于那些想知道(如果有的话),在后面的代码中,我有一个方法PopulateAdditionalCost(),每次添加或更改记录时都调用它。我只是将下面的代码添加到它的底部以重新加载自动完成控件
ScriptManager.RegisterClientScriptBlock(this.Page, this.Page.GetType(), "myscr", "LoadAuditorExtraCostsAutoComplete();", true);