asp.net - 如何在运行时计算 GridView 中的列?

标签 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>

我想添加一个最终的“总计”列来计算

(originalCount - NewCount) * unitCost

并在用户在 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>

接下来将以下 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;
}

最终结果将是一个包含所需计算总数的列。

关于asp.net - 如何在运行时计算 GridView 中的列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4799438/

相关文章:

c# - 获取带有哈希的完整 URL 以用作 ReturnUrl

c# - 将 div 元素发送到电子邮件时丢失样式 (C# asp.net)

c# - MVC : Displaying Roles in a list of checkboxes, 然后保存它们

android - 使用 RecyclerView 和 GridLayoutManager 的简单 Android 网格示例(如旧的 GridView)

c# - AjaxUploadControl 不触发 onuploadcomplete 方法

c# - Gridview 中的多列排序?

c# - Asp.net grdiview : can i format the dataitems in an itemtemplate?

javascript - 为动态复选框 JS 创建点击事件

javascript - 动态 php 和 html 表单,带有数量、价格和总 JavaScript 计算

JQuery动态ID控件属性