Frage

In einem meiner ASP.NET-Webapplikationen, ich bin mit einem BulkEditGridView (a Gridview, die alle Zeilen ermöglicht gleichzeitig bearbeitet werden) ein Bestellformular zu implementieren. In meinem Gitter habe ich eine Spalte, die am unteren Rand der Seite die Summe für jedes Element (Kosten x Menge) und eine Gesamtsumme Feld berechnet. Derzeit ist jedoch werden diese Felder nur auf jedem Post zurück aktualisiert. Ich brauche diese Felder dynamisch aktualisiert haben, so dass als Benutzer Mengen ändern, werden die Summen und Endsumme Update, um die neuen Werte zu reflektieren. Ich habe versucht, AJAX-Lösungen zu verwenden, um dies zu erreichen, aber der asynchrone post Rücken stört mit dem Fokus auf der Seite. Ich stelle mir vor, dass eine rein clientseitige Lösung existiert, und ich bin zuversichtlich, dass jemand in der Gemeinschaft teilen können.

War es hilfreich?

Lösung

Wenn Sie Ihre Berechnungen kann die einfachste Methode in JavaScript reproduziert werden würde jQuery verwenden Sie alle Einzelteile wie folgt zu erhalten:

$("#myGridView input[type='text']").each(function(){
  this.change(function(){
    updateTotal(this.value);
  });
});

Oder wenn Ihre Berechnungen sind viel zu komplex in JavaScript (oder Zeitbeschränkungen es verhindern) getan werden, dann wird ein AJAX-Aufruf an einen Web-Service ist der beste Weg. Lassen Sie uns sagen wir unseren Webservice wie diese haben:

[WebMethod, ScriptMethod]
public int UpdateTotal(int currTotal, int changedValue){
  // do stuff, then return
}

Sie werden einige JavaScript müssen den Webservice aufrufen, können Sie es entweder mit jQuery oder MS AJAX tun können. Ich werde eine Kombination aus beiden zeigen, nur so zum Spaß:

$("#myGridView input[type='text']").each(function(){
  this.change(function(){
    Sys.Net.WebServiceProxy.invoke(
      "/Helpers.asmx",
      "UpdateTotal",
      false,
      { currTotal: $get('totalField').innerHTML, changedValue: this.value },
      showNewTotal
    );
  });
});

function showNewTotal(res){
  $get('totalField').innerHTML = res;
}

überprüfen Sie diesen Link für weitere Informationen heraus auf der Sys.Net.WebServiceProxy.invoke Methode: http://www.asp.net/AJAX/Documentation/Live/ClientReference/Sys.Net/WebServiceProxyClass/WebServiceProxyInvokeMethod.aspx

Andere Tipps

Eine Lösung ist, einige Javascript in Ihnen RowDataBound Methode zu bauen, um ständig diese Summen zu aktualisieren, wenn die Textfelder ändern.

So während der RowDataBound, starten Sie einen JavaScript-String im Speicher aufzubauen, die die Textfelder summieren Sie hinzugefügt müssen. Was in RowDataBound schön ist, ist, dass Sie die Client-Seite-IDs dieser Textfelder durch den Aufruf TextBox.ClientId bekommen kann. Dieses Javascript auf die Seite, dann auch eine onkeyup Event in jedem Textbox Sie benötigen dieses Skript aufrufen.

So etwas wie (dies ist eine Reihe gebunden Ereignis von einem gridview)

private string _jscript;
protected void gridview_RowDataBound(object sender, GridViewRowEventArgs e)
{
   if (e.Row.RowType == DataControlRowType.DataRow)
   {
      //Get your textbox
      Textbox tb = e.Row.FindControl("tbAddUp");
      //Add the event that you're going to call to this textbox's attributes
      tb.Attributes.Add("onkeyup", "MyAddUpJavaScriptMethod();");
      //Build the javascript for the MyAddUpJavaScriptMethod
      jscript += "document.getElementById('" + tb.ClientId + '").value + ";
   }
}

Dann, wenn Sie das gesamte Skript erstellt haben, verwenden Sie Ihre Page.ClientScript Klasse eine Methode, um Sie Seite hinzufügen, die von Ihrem onkeyup in Ihrem Textfelder „MyAddUpJavaScriptMethod“

aufgerufen wird

Hope, den Sinn und hilft

macht
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top