У меня есть telerik RadGrid, который находится в режиме редактирования. Каждая ячейка содержит NumericTextBox. Можно ли вычислить одну ячейку на основе других ячеек в той же строке (на стороне клиента). Например, если у меня есть строка, содержащая ячейки, такие как цена и элемент, которые я хочу при каждом изменении, чтобы рассчитать общую цену, но на стороне клиента, не выходя на серверную сторону. Возможно ли это с помощью RadGrid?Как рассчитать значение ячейки RadGrid на стороне клиента?
ответ
Спасибо за все ваши ответы, но я нашел решение здесь по адресу 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>
Это возможно, если вы получили данные через привязку на стороне клиента, а также, скорее всего, через AJAX. Если это так, вы должны иметь возможность получить все значения из свойства datasource сетки. Если вы привязываете сервер данных, это становится сложнее, потому что в настоящее время сетка не создает источник данных на стороне клиента в этом случае.
Проверьте демоверсию на сайте Telerik из раздела RadGrid -> Application scenarios, который использует числовые текстовые поля и иллюстрирует, что вы ищете, чувак.
Дик
Поскольку каждый элемент в строке таблицы вы можете использовать JavaScript, чтобы найти родительский элемент, а затем петлю через все входы, чтобы найти те, которые вы ищете? Если вы собираетесь использовать jQuery, это должно быть возможно, и если вы хотите легко отличить текстовые поля, вы можете применить CssClass к каждому текстовому блоку?
Если вы thikn этой ссылке http://demos.telerik.com/aspnet-ajax/controls /examples/integration/gridandinput/defaultcs.aspx?product=grid это не то, что мне нужно. Это вычисляет нижний колонтитул, и мне нужен расчет ячейки внутри строки. – nemke