Обновлено с новым кодом (старый ответ ниже)
Вам нужно использовать 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 в ваш тег Head:
<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;
}
Конечным результатом будет столбец с желаемым рассчитанным итогом.