2011-01-25 25 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を使用する必要が

を更新しました。これには100万種類の方法がありますので、以下のコードを変更して機能させる必要があります。

次のようにあなたの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追加:最終結果は、所望の計算でカラムになり

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

次の静的メソッドを追加し、コードビハインドで、そして

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

を合計。

+0

ユーザーがテキストのフィールドを変更すると自動的に更新されますか、またはページを更新する必要がありますか? – Ben

+0

私はページ全体が更新されずに合計が更新されるように、回答全体を更新しました。 –

1

最良の答え - SINGLE LINE

<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

トータルカウント(CELL3)

(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

関連する問題