2009-05-28 18 views
1

Ich habe Telerik RadGrid, die im Bearbeitungsmodus ist. Jede Zelle enthält NumericTextBox. Ist es möglich, eine Zelle basierend auf anderen Zellen in derselben Zeile (auf der Client-Seite) zu berechnen? Zum Beispiel, wenn ich eine Zeile habe, die Zellen wie Preis und Artikel enthält, möchte ich bei jeder Änderung den Gesamtpreis berechnen, aber auf der Client-Seite, ohne zur Server-Seite zu gehen. Ist das mit RadGrid möglich?Wie berechnet man den RadGrid-Zellenwert auf der Client-Seite?

Antwort

5

Danke für alle Ihre Antworten, aber ich fand die Lösung hier bei telerik forum. Ich füge einfach die Lösung hier ein, für den Fall, dass jemand in demselben Problem steckenbleibt.

ASPX:

<Columns> 
    <rad:GridTemplateColumn UniqueName="Price" HeaderText="Price"> 
    <EditItemTemplate> 
     <radI:RadNumericTextBox ID="txtPrice" runat="server"> 
     </radI:RadNumericTextBox> 
    </EditItemTemplate> 
    </rad:GridTemplateColumn> 
    <rad:GridTemplateColumn UniqueName="Quantity" HeaderText=" Number of Items"> 
    <EditItemTemplate> 
     <radI:RadNumericTextBox ID="txtQuantity" runat="server"> 
     </radI:RadNumericTextBox> 
    </EditItemTemplate> 
    </rad:GridTemplateColumn> 
    <rad:GridTemplateColumn UniqueName="TotalAmount" HeaderText="Total"> 
    <EditItemTemplate> 
     <radI:RadNumericTextBox ID="txtTotalAmount" runat="server"> 
     </radI:RadNumericTextBox> 
    </EditItemTemplate> 
    </rad:GridTemplateColumn> 
</Columns> 

C#

protected void RadGrid1_ItemDataBound(object sender, GridItemEventArgs e) 
    { 

    if (e.Item is GridDataItem && e.Item.IsInEditMode) 
    { 
     GridDataItem item = (GridDataItem)e.Item; 
     RadNumericTextBox txtPrice= item.FindControl("txtPrice") as RadNumericTextBox;  // Get the textbox for column Price 
     RadNumericTextBox txtQuantity= item.FindControl("txtQuantity") as RadNumericTextBox; // Get the textbox for column Quantity  
     RadNumericTextBox txtTotalAmount= item.FindControl("txtTotalAmount") as RadNumericTextBox; // Get the textbox for column "TotalAmount", if it is template as shown in aspx  

     txtPrice.Attributes.Add("onFocusout", "return calculate('" + txtPrice.ClientID + "','" + txtQuantity.ClientID + "','" + txtTotalAmount.ClientID + "')"); 
     txtQuantity.Attributes.Add("onFocusout", "return calculate('" + txtPrice.ClientID + "','" + txtQuantity.ClientID + "','" + txtTotalAmount.ClientID + "')"); 
     txtTotalAmount.Attributes.Add("onfocus", "return calculate('" + txtPrice.ClientID + "','" + txtQuantity.ClientID + "','" + txtTotalAmount.ClientID + "')"); 
    } 
} 

JavaScript:

<script type="text/javascript"> 
function calculate(price, quantity, totalAmount) 
{ 
    var text1 = $find(price); //I used Asp.net Ajax find method 
    var text2 = $find(quantity); 
    var text3 = $find(totalAmount); 
    var total = text1.GetValue() * text2.GetValue(); 
    text3.SetValue(total); 
} 
</script> 
0

Es ist möglich, vorausgesetzt, Sie haben die Daten auch über die Client-Seite erhalten, am wahrscheinlichsten über AJAX. In diesem Fall sollten Sie alle Werte aus der Datenquelleneigenschaft des Rasters abrufen können. Wenn Sie die Datenserverseite binden, wird es schwieriger, da das Raster in diesem Fall derzeit nicht die clientseitige Datenquelle erstellt.

0

Schauen Sie sich die Demo auf der Telerik-Seite von RadGrid -> Anwendungsszenarien an, die numerische Textfelder verwendet und veranschaulicht, wonach Sie suchen, Alter.

Dick

+0

Wenn Sie thikn dieser Link http://demos.telerik.com/aspnet-ajax/controls /examples/integration/gridandinput/defaultcs.aspx?product=grid es ist nicht das, was ich brauche. Das berechnet Fußzeile und ich brauche Berechnung der Zelle innerhalb einer Reihe. – nemke

0

Da jedes Element in einer Tabellenzeile ist Sie Javascript verwenden, könnte das übergeordnete Element zu finden und dann eine Schleife durch alle Eingänge diejenigen zu finden, die Sie suchen? Wenn Sie jQuery verwenden, sollte dies möglich sein, und wenn Sie die Textfelder leicht unterscheiden wollten, konnten Sie eine CssClass auf jede TextBox anwenden?

Verwandte Themen