0

製品の詳細を含むグリッドビューと、追加した数量テキストボックスがあります。DB には接続されていません。行ごとにコスト (価格 * 数量) とすべての行の合計コスト (以下のラベル) を表示する必要があります。いくつか問題があります。1. 数量テキスト ボックスに 0 が入力されるため、数量を常に 1 に更新する必要があり、その後計算されます。

これは、rowdataboundevent の C# でより適切に実行できる可能性があることも知っています。提案をいただければ幸いです。

何が悪いのか理解してください。コードは次のとおりです。

<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jqueryui/1.7.2/jquery-ui.js"></script>
    <script type="text/javascript">

$(function () {
    $("[id*=lblquantity]").val("0");
    });
$("[id*=lblquantity]").live("change", function () {
        if (isNaN(parseInt($(this).val()))) {
            $(this).val('0');
        } else {
            $(this).val(parseInt($(this).val()).toString());
        }
    });
    $("[id*=lblquantity]").live("keyup", function () {
        if (!jQuery.trim($(this).val()) == '') {
            if (!isNaN(parseFloat($(this).val()))) {
                var row = $(this).closest("tr");
                $("[id*=lblTotal]", row).html(parseFloat($(".price", row).html()) * parseFloat($(this).val()));
            }
        } else {
            $(this).val('');
        }
        var grandTotal = 0;
        $("[id*=lblTotal]").each(function () {
            grandTotal = grandTotal + parseFloat($(this).html());
        });
        $("[id*=lblGrandTotal]").html(grandTotal.toString());
        $("[id*=hfGrandTotal]").val(grandTotal.toString())
    });
    </script>

これがASP.netのグリッドビューのコードです。

 <asp:HiddenField ID="hfGrandTotal" runat="server"  />
    <asp:GridView ID="GridView2" runat="server" AutoGenerateColumns="False" 
        EnableViewState="False" onrowdatabound="GridView2_RowDataBound">
        <Columns>
        <asp:BoundField DataField="Price" HeaderText="Price" ItemStyle-CssClass="price" >

<ItemStyle CssClass="price"></ItemStyle>
            </asp:BoundField>

                         <asp:TemplateField HeaderText="ProductID">
                <ItemTemplate>
                    <asp:Label ID="lblID" runat="server" Text='<%# Eval("ProductID") %>'></asp:Label>
                </ItemTemplate>
            </asp:TemplateField>
             <asp:TemplateField HeaderText="ProductName">
                <ItemTemplate>
                    <asp:Label ID="lblName" runat="server" Text='<%# Eval("ProductName") %>'></asp:Label>
                </ItemTemplate>
            </asp:TemplateField>

             <asp:TemplateField HeaderText="Summary">
                <ItemTemplate>
                    <asp:Label ID="lblSum" runat="server" Text='<%# Eval("Summary") %>'></asp:Label>
                </ItemTemplate>
            </asp:TemplateField>
             <asp:TemplateField HeaderText="picPath">
                <ItemTemplate>
                    <asp:Label ID="lblPic" runat="server" Text='<%# Eval("picPath") %>' ></asp:Label>
                </ItemTemplate>
            </asp:TemplateField>

            <asp:TemplateField HeaderText = "quantity">
            <ItemTemplate>
                <asp:TextBox ID="lblquantity" runat="server"  ></asp:TextBox>

            </ItemTemplate>
        </asp:TemplateField>

        <asp:TemplateField HeaderText = "Total">
            <ItemTemplate>
                <asp:Label ID="lblTotal" runat="server" ></asp:Label>
            </ItemTemplate>
        </asp:TemplateField>



        </Columns>
    </asp:GridView>

ありがとう

4

2 に答える 2

1

これらの変更を行います

ステップ1。価格を aにして、このようasp:TemplateFieldにクラスを追加しlblTotalます。また、あなたが書いたように、Quantity をマークアップのテキスト ボックスにする必要がありますか?

<asp:TemplateField HeaderText="Price">
    <ItemTemplate>
         <asp:Label ID="lblPrice" runat="server" CssClass="rowprice"></asp:Label>
    </ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="Quantity">
    <ItemTemplate>
         <asp:TextBox ID="txtQuantity" runat="server" CssClass="rowqty" Text="1">
         </asp:TextBox>
    </ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="Total">
    <ItemTemplate>
         <asp:Label ID="lblTotal" runat="server" CssClass="rowtotal"></asp:Label>
    </ItemTemplate>
</asp:TemplateField>

ステップ2。この数値プラグインをダウンロードして、これを DOMReady に書き込みます

$(document).ready(function() {
    $(".rowqty").numeric({
        decimal: false,
        negative: false
    });
});​

これは、数量テキスト ボックスが正の整数のみを受け入れるようにするためです。

Step3.

protected void GridView2_RowDataBound(Object sender, GridViewRowEventArgs e)
{
    if(e.Row.RowType == DataControlRowType.DataRow)
    {
         var priceLabel =  e.Row.FindControl("lblPrice") as Label;
         var quantityTextBox =  e.Row.FindControl("txtQuantity") as TextBox;
         var totalLabel =  e.Row.FindControl("lblPrice") as Label;
         var onKeyUpScript = String.Format(
                                  "javascript:CalculateRowTotal('#{0}', '#{1}', '#{2}');",
                                  quantityTextBox.ClientID,
                                  priceLabel.ClientID,
                                  totalLabel.ClientID);
         quantityTextBox.Attributes.Add("onkeyup", onKeyUpScript);
    }
}

Step3. asp:HiddenFieldasp:Labelを追加ClientIDMode="Static"

<asp:HiddenField ID="hfGrandTotal" runat="server"></asp:HiddenField>
Grand Total: <asp:Label ID="lblGrandTotal" runat="server"></asp:Label>

Step4. ページに JavaScript 関数を追加する

function CalculateRowTotal(qty_id, price_id, total_id) {
    var row_quantity = $(qty_id);
    var row_price = $(price_id);
    var row_total = $(total_id);
    var qty = parseInt($.trim($(this).val()), 10);
    if (isNaN(qty) || qty === 0) {
        qty = 1;
        row_quantity.val("1");
    }
    var totalAmount = parseFloat(row_price.html()) * qty;
    row_total.html(totalAmount);
    var grandTotal = 0;
    $(".rowtotal").each(function() {
        grandTotal += parseFloat($(this).html());
    });
    $("#hfGrandTotal").val(grandTotal);
    $("#lblGrandTotal").html(grandTotal);
}​

お役に立てれば。

于 2012-10-08T10:55:16.033 に答える
0

これはクライアント側の負荷+遅いため、JSではこれを行いません。

RowDataBound で言ったように入力します。あなたのものはGridView2_RowDataBoundにあります。
コントロールを見つけて正しいコントロールにキャストし、テキストを入力するだけです。

((Label)e.Row.FindControl("lblTotal")).Text = (price * quantity);

おそらく、dataItem に価格と数量が格納されているはずです。
.Text には文字列が必要なので、文字列にも変換する必要があると思います。
あなたが使用することができます

(price * quantity).ToString() 

また

Convert.ToString(price * quantity);
于 2012-10-08T09:24:49.377 に答える