我正在使用 RadGrid。
我关注了这篇文章@StackOverflow并调用了一个javascript方法来对单元格进行一些计算并更新同一行上的另一个单元格。
它调用Calculate方法,但单元格值第一次不可用。如果单元格再次获得焦点,则该值将显示在Calculate() 中。所有行都是这种情况。
使用第二个 onBlur 事件的计算值更新目标单元格,因为第一个 onBlur 不会带来编辑值。但是,当焦点转到任何其他单元格时,目标单元格会丢失它的更新值并返回到原始值。我没有在任何其他单元格事件上调用任何其他 javascript 方法。
我的要求是计算例如 qtyCell 和 costCell 并在客户端更新 amountCell。
protected void RadGrid1_ItemDataBound(object sender, GridItemEventArgs e)
{
if (e.Item is GridDataItem)
{
GridDataItem item = (GridDataItem)e.Item;
RadTextBox txtQty = item.FindControl("qty") as RadTextBox;
RadTextBox txtAmount = item.FindControl("valued") as RadTextBox;
RadTextBox txtUnitCost = item.FindControl("unitcost") as RadTextBox;
if (txtQty != null && txtAmount != null && txtUnitCost != null)
{
txtQty.Attributes.Add("onBlur", "calculate('" + txtQty.ClientID + "','" + txtAmount.ClientID + "','" + txtUnitCost.ClientID + "')");
}
}
}
Javascript:
<script type="text/javascript">
function calculate(price, quantity, totalAmount) //this method throws error
{
//var text1 = $find(price);
//var text2 = $find(quantity);
//var text3 = $find(totalAmount);
//var total = text1.GetValue() * text2.GetValue();
//text3.SetValue(total);
//commented out the above lines because .GetValue() and .SetValue() throws an error "Object does not support this method"
var txtqty = $find(qtyCtrl);
var txtunitcost = $find(unitcostCtrl);
var txtvalued = $find(valuedCtrl);
var qty = txtqty.get_displayValue();
var unitcost = txtunitcost.get_displayValue();
var amount = qty * unitcost;
txtvalued.set_displayValue(amount);
}
</script>