Como calcular o valor da célula RadGrid no lado do cliente?
-
06-09-2019 - |
Pergunta
Eu tenho telerik RadGrid que está em modo de edição. Cada célula contém NumericTextBox. É possível calcular uma célula com base em outras células na mesma linha (no lado do cliente). Por exemplo, se eu tiver uma linha que contém células, como preço e item que eu quero a cada mudança para calcular o preço total, mas no lado do cliente, sem ir ao lado do servidor. Isso é possível com RadGrid?
Solução
Obrigado por todas as suas respostas, mas eu encontrei a solução aqui no telerik fórum. Eu só vou colar a solução aqui no caso de alguém ficar preso sobre a mesma questão.
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>
Outras dicas
É possível desde que você tem os dados através do lado do cliente de ligação, bem como, muito provavelmente através de AJAX. Se assim for, você deve ser capaz de obter todos os valores da propriedade fonte de dados do grid. Se você ligar o lado do servidor de dados se torna mais difícil, porque atualmente a grade não construir a fonte de dados do lado do cliente neste caso.
Confira a demonstração no site Telerik de RadGrid -.> Seção cenários de aplicação que usa caixas de texto numéricas e ilustra o que você está procurando, cara
Dick
Porque cada item está em uma linha da tabela que você poderia usar javascript para encontrar o item pai e, em seguida, percorrer todos os insumos para encontrar o que você está procurando? Se você estiver indo para usar jQuery isso deve ser possível e se você queria para distinguir as caixas de texto facilmente você poderia aplicar um CssClass a cada TextBox?