如何在客户端计算RadGrid单元格值?

时间:2009-05-28 12:54:24

标签: asp.net javascript jquery telerik radgrid

我有处理编辑模式的telerik RadGrid。每个单元格都包含NumericTextBox。是否可以根据同一行中的其他单元格(在客户端)计算一个单元格。 例如,如果我有一行包含价格和项目的单元,我想在每次更改时计算总价但在客户端,而不是去服务器端。 RadGrid有可能吗?

4 个答案:

答案 0 :(得分:5)

感谢您的所有答案,但我在telerik forum找到了解决方案。我会在这里粘贴解决方案,以防有人遇到同样的问题。

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>

答案 1 :(得分:0)

如果您通过客户端绑定获得数据,也很可能通过AJAX获得数据。如果是这样,您应该能够从网格的datasource属性获取所有值。如果绑定数据服务器端则会变得更难,因为在这种情况下,当前网格不会构建客户端数据源。

答案 2 :(得分:0)

从RadGrid查看Telerik网站上的演示 - &gt;应用场景部分使用数字文本框并说明您要查找的内容,粗鲁。

迪克

答案 3 :(得分:0)

因为每个项目都在一个表格行中,你可以使用javascript找到父项目,然后遍历所有输入来找到你要找的那些?如果您打算使用jQuery,这应该是可能的,如果您想轻松区分文本框,可以将CssClass应用于每个TextBox吗?