ラドグリッドを使用しています。
この投稿@StackOverflowに従い、javascriptメソッドを呼び出してセルで計算を行い、同じ行の別のセルを更新しました。
Calculate メソッドを呼び出しますが、最初はセルの値を使用できません。セルが再びフォーカスされると、値が Calculate() に表示されます。これはすべての行で当てはまります。
最初の onBlur は編集された値をもたらさないため、ターゲット セルは 2 番目の 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>