1

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

4

4 回答 4

6

感谢您的所有回答,但我在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>
于 2009-05-30T09:05:57.640 回答
0

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

于 2009-05-28T12:58:22.010 回答
0

从 RadGrid -> 应用程序场景部分查看 Telerik 网站上的演示,该部分使用数字文本框并说明您正在寻找什么,伙计。

迪克

于 2009-05-28T13:32:51.660 回答
0

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

于 2009-05-29T00:23:10.973 回答