2017-06-16 63 views
0

我有一个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在当前上下文中不存在。这个问题可能与此有关,但我不知道如何解决它。

是否有人能够协助,以便用户可以在添加一条记录后再次使用自动完成功能?提前致谢!

回答

0

对于那些想知道(如果有的话),在后面的代码中,我有一个方法PopulateAdditionalCost(),每次添加或更改记录时都调用它。我只是将下面的代码添加到它的底部以重新加载自动完成控件

ScriptManager.RegisterClientScriptBlock(this.Page, this.Page.GetType(), "myscr", "LoadAuditorExtraCostsAutoComplete();", true);