Ben*_*Ben 3 asp.net gridview dynamic
我有以下 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>
Run Code Online (Sandbox Code Playgroud)
我想添加一个最终的“总计”列来计算
(originalCount - NewCount) * unitCost
Run Code Online (Sandbox Code Playgroud)
并在用户在 NewCount 文本框中输入数字时更新它。
我可以仅使用 .net 来完成此操作,还是需要使用 Java?如果是后者,我如何知道要更新哪个 Gridview 单元格?
提前致谢,
本
使用新代码更新(下面是旧答案)
您需要使用 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>
Run Code Online (Sandbox Code Playgroud)
接下来将以下 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>
Run Code Online (Sandbox Code Playgroud)
你有它。当您对 NewCount 进行更改时,最右列中的总数将自动更新。
旧答案
您可以通过添加新的 TemplateField 然后编写静态方法来计算总数来完成此操作。这超出了我的想象,但你做了类似于下面的事情。
首先,添加以下 TemplateField:
<asp:TemplateField HeaderText="Total" ItemStyle-HorizontalAlign="Center" >
<ItemTemplate>
<%# GetTotal((double)Eval("originalCount"),(double)Eval("NewCount"),(double)Eval("unitCost")) %>
</ItemTemplate>
</asp:TemplateField>
Run Code Online (Sandbox Code Playgroud)
然后,在代码隐藏中添加以下静态方法:
public static double GetTotal(double originalCount, double NewCount, double unitCost) {
return (originalCount - NewCount) * unitCost;
}
Run Code Online (Sandbox Code Playgroud)
最终结果将是一个包含所需计算总数的列。
| 归档时间: |
|
| 查看次数: |
9546 次 |
| 最近记录: |