2017-06-16 64 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);