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