2009-05-28 4 views
1

У меня есть telerik RadGrid, который находится в режиме редактирования. Каждая ячейка содержит NumericTextBox. Можно ли вычислить одну ячейку на основе других ячеек в той же строке (на стороне клиента). Например, если у меня есть строка, содержащая ячейки, такие как цена и элемент, которые я хочу при каждом изменении, чтобы рассчитать общую цену, но на стороне клиента, не выходя на серверную сторону. Возможно ли это с помощью RadGrid?Как рассчитать значение ячейки RadGrid на стороне клиента?

ответ

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> 
0

Это возможно, если вы получили данные через привязку на стороне клиента, а также, скорее всего, через AJAX. Если это так, вы должны иметь возможность получить все значения из свойства datasource сетки. Если вы привязываете сервер данных, это становится сложнее, потому что в настоящее время сетка не создает источник данных на стороне клиента в этом случае.

0

Проверьте демоверсию на сайте Telerik из раздела RadGrid -> Application scenarios, который использует числовые текстовые поля и иллюстрирует, что вы ищете, чувак.

Дик

+0

Если вы thikn этой ссылке http://demos.telerik.com/aspnet-ajax/controls /examples/integration/gridandinput/defaultcs.aspx?product=grid это не то, что мне нужно. Это вычисляет нижний колонтитул, и мне нужен расчет ячейки внутри строки. – nemke

0

Поскольку каждый элемент в строке таблицы вы можете использовать JavaScript, чтобы найти родительский элемент, а затем петлю через все входы, чтобы найти те, которые вы ищете? Если вы собираетесь использовать jQuery, это должно быть возможно, и если вы хотите легко отличить текстовые поля, вы можете применить CssClass к каждому текстовому блоку?