2011-01-25 29 views
2

我有以下的GridView:如何在GridView中實時計算一列?

<asp:GridView ID="gv" AutoGenerateColumns="false" runat="server"> 
     <Columns> 
      <asp:BoundField DataField="productName" HeaderText="Item" /> 
      <asp:BoundField DataField="unitCost" HeaderText="Cost" DataFormatString="{0:c}" /> 
      <asp:BoundField DataField="originalCount" ItemStyle-HorizontalAlign="Center" HeaderText="Old Count" />   
      <asp:TemplateField HeaderText="New Count" ItemStyle-HorizontalAlign="Center" > 
       <ItemTemplate> 
        <asp:TextBox ID="NewCount" Width="20" runat="server" /> 
       </ItemTemplate> 
      </asp:TemplateField> 
     </Columns> 
    </asp:GridView> 

而且我想添加一個最終的「合計」欄,計算

(originalCount - NewCount) * unitCost 

和更新它在用戶輸入的NewCount文本框中輸入一個數字。

我可以使用.net來做這個,還是我需要使用Java?如果後者,我如何告訴哪個Gridview單元更新?

由於提前,

回答

3

更新與新代碼(以下舊答案)

您需要使用Javascript功能來你在問什麼。有一百萬種不同的方式,所以你需要修改下面的代碼,使它爲你工作。

創建你的GridView如下:

<asp:GridView runat="server" ID="gv1" AutoGenerateColumns="false"> 
     <Columns> 
      <asp:BoundField DataField="productName" HeaderText="Item" /> 
      <asp:TemplateField HeaderText="Cost"> 
       <ItemTemplate> 
        <asp:Label runat="server" ID="unitCost" Text='<%# String.Format("{0:c}",Eval("unitCost")) %>'/> 
       </ItemTemplate> 
      </asp:TemplateField> 
      <asp:TemplateField ItemStyle-HorizontalAlign="Center" HeaderText="Old Count"> 
       <ItemTemplate> 
        <asp:Label runat="server" ID="originalCount" Text='<%# Bind("originalCount") %>' /> 
       </ItemTemplate> 
      </asp:TemplateField>   
      <asp:TemplateField HeaderText="New Count" ItemStyle-HorizontalAlign="Center" > 
       <ItemTemplate> 
        <asp:TextBox ID="NewCount" Width="20" runat="server" onblur="javascript:GetTotal(this);" /> 
       </ItemTemplate> 
      </asp:TemplateField> 
      <asp:TemplateField HeaderText="Total" ItemStyle-HorizontalAlign="Center" > 
       <ItemTemplate> 
        <asp:Label runat="server" ID="lblTotal"></asp:Label> 

       </ItemTemplate> 
      </asp:TemplateField> 
     </Columns> 
</asp:GridView> 

下一頁添加以下JavaScript你的頭標記:

<script type="text/javascript"> 
    function GetTotal(obj) { 
     var rowIndex = obj.id.substring(obj.id.lastIndexOf('_') + 1, obj.id.length); 
     var unitCost = document.getElementById('MainContent_gv1_unitCost_' + rowIndex).innerHTML.replace("$", "") ; 
     var originalCount = document.getElementById('MainContent_gv1_originalCount_' + rowIndex).innerHTML; 
     var NewCount = document.getElementById('MainContent_gv1_NewCount_' + rowIndex).value; 
     document.getElementById('MainContent_gv1_lblTotal_' + rowIndex).innerHTML = "$" + ((originalCount - NewCount) * unitCost).toFixed(2); } 
</script> 

有你有它。當您對NewCount進行更改時,總數將自動更新在最右側的列中。


老回答

您可以通過添加一個新的TemplateField,然後寫一個靜態方法來計算總的做到這一點。這是我的頭頂,但你做了類似於下面的內容。

首先,添加以下的TemplateField:

<asp:TemplateField HeaderText="Total" ItemStyle-HorizontalAlign="Center" > 
    <ItemTemplate> 
     <%# GetTotal((double)Eval("originalCount"),(double)Eval("NewCount"),(double)Eval("unitCost")) %> 
    </ItemTemplate> 
</asp:TemplateField> 

然後,在代碼隱藏,添加以下靜態方法:

public static double GetTotal(double originalCount, double NewCount, double unitCost) { 
    return (originalCount - NewCount) * unitCost; 
} 

最終的結果將是具有期望的計算出的柱總。

+0

當用戶更改文本中的字段或者是否需要刷新頁面時,此更新是否會自動進行? – Ben 2011-01-26 07:53:40

1

最佳答案 - 單線

<asp:TemplateField HeaderText="Net Amt"> 
    <ItemTemplate>  
<%# (Eval("itm_or_fee_amt")==DBNull.Value?0:Convert.ToDouble(Eval("itm_or_fee_amt")))+(Eval("late_fee")==DBNull.Value?0:Convert.ToDouble(Eval("late_fee"))) %> 
</ItemTemplate> 
</asp:TemplateField> 
-1

TOTALCOUNT(小區3)

(originalCount(CELL0) - NewCount(小區1))* unitCost(小區2);

在的RowDataBound方法

e.Row.Cells [3]的.text =(e.Row.Cells [0]的.text -e.Row.Cells [1] ..文字)* e.Row .Cells [2] .text