代码之家  ›  专栏  ›  技术社区  ›  nemke Todd Stout

如何在客户端计算RadGrid单元值?

  •  1
  • nemke Todd Stout  · 技术社区  · 15 年前

    我有telerik RadGrid,它处于编辑模式。每个单元格都包含NumericTextBox。是否可以基于同一行(客户端)中的其他单元格计算一个单元格。 例如,如果我有一行,其中包含像price和item这样的单元格,我希望在每次更改中计算总价,但在客户端,而不去服务器端。这在RadGrid中是可能的吗?

    4 回复  |  直到 15 年前
        1
  •  6
  •   nemke Todd Stout    15 年前

    谢谢你的回答,但我在这里找到了解决办法 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>
    
        2
  •  0
  •   Otávio Décio    15 年前

    如果您也通过客户端绑定(最有可能是通过AJAX)获得数据,这是可能的。如果是这样,您应该能够从网格的datasource属性获取所有值。如果绑定数据服务器端,则会变得更加困难,因为在这种情况下,网格当前没有构建客户端数据源。

        3
  •  0
  •   Dick Lampard Dick Lampard    15 年前

    迪克

        4
  •  0
  •   Sean Molam    15 年前

    因为每个项都在一个表行中,所以您可以使用javascript查找父项,然后通过所有输入循环查找您要查找的项?如果您打算使用jQuery,这应该是可能的,如果您想轻松区分文本框,您可以对每个文本框应用CssClass?