2016-08-06 52 views
2

Ich verwende die neueste Version von WebForms Grid von Syncfusion in einer ASP.Net Webforms 4.0 Website. Die Bindung erfolgt mithilfe von WebMethod, d. H. Ajax-aktiviertem Webdienst. Das Markup dieses Gitters ist wie folgt.Wie verhindert man, dass ein Filtertextfeld in Syncfusion ASP.Net Webforms Grid serverseitige Anfragen sendet?

Das Problem ist, wenn ich auf Product Name Spalte filtern und beginnen, in das Filterfeld von Product Name eingeben, dann sendet das Raster eine Anfrage an Server für übereinstimmende Produktnamen für jedes eingegebene Zeichen. Ich möchte das nicht, damit der Benutzer in das Filtertextfeld eingeben kann, ohne dass serverseitige Anforderungen die Eingabe des Benutzers verlangsamen.

Frage: Wie kann ich verhindern, dass das Filtertextfeld für Product Name eine Serveranforderung als Benutzertypen in das Textfeld sendet? Ich habe versucht, in der Dokumentation nach einer Rastereigenschaft zu suchen, um dieses Problem zu lösen, konnte jedoch keine finden.

Filter text box posting back unnecessarily

Markup von Webforms Grid von Syncfusion

<ej:Grid ID="Grid1" runat="server" AllowFiltering="True" AllowPaging="True" AllowSorting="True" > 
    <DataManager Adaptor="WebMethodAdaptor" URL="WebService1.asmx/GetProducts" /> 
    <Columns> 
     <ej:Column Field="ProductId" Width="200" HeaderText="Product ID" AllowFiltering="true"></ej:Column> 
     <ej:Column Field="ProductName" Width="200" HeaderText="Product Name" AllowFiltering="true" ></ej:Column> 
     <ej:Column Field="UnitPrice" Width="200" HeaderText="Unit Price" Format="{0:c}" AllowFiltering="true"></ej:Column> 
     <ej:Column Field="UnitsInStock" Width="200" HeaderText="Units in Stock" AllowFiltering="true"></ej:Column> 
    </Columns> 
    <PageSettings Template=""></PageSettings> 
    <RowDropSettings DropTargetID="" DropMapper=""></RowDropSettings> 
    <ScrollSettings EnableTouchScroll="False"></ScrollSettings> 
    <FilterSettings FilterType="Menu" EnableCaseSensitivity="false"></FilterSettings> 
</ej:Grid> 

Antwort

1

Wir haben Ihre Abfrage analysiert und wir haben Ihre Anforderung erreicht durch Databound-Ereignis des Rasters und ejDataManger verwenden. Da wir die gesamten Daten vom Code hinten an den ejDataManager gebunden haben und ihn der Eigenschaft dataSource von ejAutocomplete zugewiesen haben. Wenn wir uns jetzt auf die automatische Vervollständigung konzentrieren, haben wir die Daten an die Autocomplete-dataSource gebunden und wenn wir irgendwelche Daten auswählen, wird dies vom POST verhindert. Da die gesamten Daten als lokale Daten abgerufen wurden.

entnehmen Sie bitte das folgende Codebeispiel

[Default.aspx]

<ej:Grid ID="Grid1" runat="server" AllowFiltering="True" AllowPaging="True"… 

    <ClientSideEvents DataBound="databound"/> 

    … 

    <script type="text/javascript"> 
    var b; 
    function databound(args) { 
     setTimeout(function() { 
      var dataManager = ej.DataManager({ url: "WebService1.asmx/HelloWorld", offline: true, adaptor: "UrlAdaptor" }); 
      var promise = dataManager.executeQuery(new ej.Query()); 
      promise.done(function (e) { 
      var a = 
    $("#MainContent_Grid1_acString").ejAutocomplete("instance"); 
       b = e.result; 

      }); 
     promise.fail(function (s) { 
        console.log(s) 
    }) 
    $("#MainContent_Grid1_acString").ejAutocomplete({ focusIn: "change" }); 
     }, 600); 
    } 
     function change(args) { 
      var a =   $("#MainContent_Grid1_acString").ejAutocomplete("instance"); 
      a.model.dataSource = b;   //Passed the data as local when we focusIn the autocomplete 
     } 
</script> 

[WebService1.asmx.cs]

[WebMethod] 

     public IEnumerable HelloWorld() 

    { 

     SqlConnection myConnection = new SqlConnection(ConfigurationManager.ConnectionStrings["NORTHWNDConnectionString"].ToString()); 
     … 

     IEnumerable order = (from DataRow row in dt.Rows 
          select new Products 
          { 
           ProductId = Convert.ToInt32(row["ProductId"]), 
           ProductName = row["ProductName"].ToString(), 
           UnitPrice = Convert.ToDouble(row["UnitPrice"]), 
           UnitsInStock = Convert.ToInt32(row["UnitsInStock"]) 
          }).ToList(); 


     return order; 
    } 

In dem obigen Code, den wir ein Verfahren initialisiert in Code hinter und zurück das Ergebnis allein, um die Daten an die Autovervollständigung zu binden.

+0

Vielen Dank für Ihre ausführliche Antwort. – Sunil