は、新しいコード(以下旧答)あなたが求めているものを行うには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>
を合計。
ユーザーがテキストのフィールドを変更すると自動的に更新されますか、またはページを更新する必要がありますか? – Ben
私はページ全体が更新されずに合計が更新されるように、回答全体を更新しました。 –