Andrew Chambers Ответов: 2

Всего столбец GridView с помощью JQuery.


Нашел этот отличный пример того, как суммировать строку gridview в интернете.
Просто нужна помощь в адаптации его к моему решению.

Я предполагаю, что проблема заключается в строке "#GridView1 span[id*='lblTotal']"
поскольку это было единственное реальное изменение, которое я сделал из исходного кода.

Код ниже:

<script language="javascript" type="text/javascript">
     function calculate() {
     var Amount = 0;
     $("#GridView1 span[id*='lblTotal']").each(function (index) {
     //Check if number is not empty
     if ($.trim($(this).val()) != "")
     //Check if number is a valid integer
         if (!isNaN($(this).val()))
             Amount = Amount + parseFloat($(this).val());
 });
       $("#GridView1 span[id*='lblTotalAmount']").text(Amount);        }
  </script>


Отметьте это ниже:

 <asp:GridView ID="GridView1" runat="server"

AutoGenerateColumns="False" OnRowDataBound="GridView1_RowDataBound" 

            DataSourceID="AccessDataSource1" 

            ShowFooter="True" style="margin-bottom: 0px">
            <Columns>
            <asp:TemplateField HeaderText="Devices And Services" Visible="True" HeaderStyle-HorizontalAlign="Left"  FooterText="Payable monthly in advance (excluding Agreement items):" ItemStyle-BackColor="#CCCCCC">
                    <ItemTemplate>
                        <asp:Label ID="lblItemDescription" runat="server" Width="382"

Text='<%# Eval("itemDescription") %>'></asp:Label>
                    </ItemTemplate>

<HeaderStyle HorizontalAlign="Left"></HeaderStyle>
                </asp:TemplateField>
                <asp:TemplateField HeaderText="Rate">
                    <ItemTemplate>
                        <asp:Label ID="lblRate" runat="server" width="50" ></asp:Label>
                       
                    </ItemTemplate>
                </asp:TemplateField>
                <asp:TemplateField HeaderText="Number" ControlStyle-BackColor="#FFFFCC">
                    <ItemTemplate>
                        <asp:TextBox ID="txtBoxNumber" Width="100px"

runat="Server"  />
                    </ItemTemplate>
                </asp:TemplateField>
                <asp:TemplateField HeaderText="Total" ItemStyle-CssClass="total">
                    <ItemTemplate>                  
                        <asp:Label ID="lblTotal" runat="Server"  Width="106"  />
                    </ItemTemplate>
                    <FooterTemplate>
                          
                 <asp:Label ID="lblTotalAmount" runat="server"  />        
                
                    </FooterTemplate>
                </asp:TemplateField>
              
               
                  
                    
                
            </Columns>
            <FooterStyle Font-Bold="True" />
        </asp:GridView>


В моем решении мой lblTotal вычисляется с помощью Javascript

Код Ниже:

<script type="text/javascript">

    function multiply(Rate, number, total) {
        
        var grid = document.getElementById('GridView1');      
        var num = parseFloat(document.getElementById(number).value);
        var tot = document.getElementById(total);
      
        var totValue = parseFloat(((Rate * num)));
        var totValueRound = Math.round(totValue);
        var totValueRound = totValue;
        tot.innerHTML =  totValue.toFixed(2);
        calculate();
       
    }
<script/> 

Herman&lt;T&gt;.Instance

'Я предполагаю, что проблема заключается в строке "#пядь управления gridview1[ИД*='lblTotal']"'
Ну, знаешь что. Чем мы можем вам помочь сейчас? Есть ли какая-нибудь ошибка/исключение, с которым вы сталкиваетесь?

Andrew Chambers

ошибки нет в помине. ты что-нибудь видишь здесь digimanus?
Давайте работать, чтобы помочь разработчикам, а не заставлять их чувствовать себя глупо.

2 Ответов

Рейтинг:
2

Steve Echols

Ты на правильном пути:

<asp:gridview id="GridView1" xmlns:asp="#unknown"></asp:gridview>


Не равняется

$("#GridView1


Asp.NET идентификаторы-это идентификаторы DOM на стороне клиента. Вам нужно передать значение свойства ClientID gridview в ваш javascript.

Одним из способов было бы (предполагая, что ваш скрипт находится на странице .aspx, а не на include-скрипте):

<script language="javascript" type="text/javascript">
      function calculate() {
      var Amount = 0;
      $("#<%=GridView1.ClientID%> span[id*='lblTotal']").each(function (index) {
      //Check if number is not empty
      if ($.trim($(this).val()) != "")
      //Check if number is a valid integer
          if (!isNaN($(this).val()))
              Amount = Amount + parseFloat($(this).val());
  });
        $("#<%=GridView1.ClientID%> span[id*='lblTotalAmount']").text(Amount);        }
   </script>


Надеюсь, что это даст вам некоторые идеи в любом случае.%>


Martin Arapovic

- Да! Что такое правильный способ, чтобы использовать jQuery с элементами управления ASP.NET сервер.ClientId также может быть задан явно, если asp.net используется версия 4.0 или выше... :)

Steve Echols

Правда, правда. ClientIDMode="статический" или ClientIDMode="предсказуемый" заставит его работать в версии 4.0.

Andrew Chambers

Спасибо за это. Я попробовал код, как вы написали, но безрезультатно.

Я также прикрепил класс как к lblTotal, так и к lblTotalAmount.

$(".total").each(функция (ИНДЕКС)и $(".totallabel").text(сумма);

но безрезультатно.Есть еще идеи?Овации

Steve Echols

Я думаю, что идентификаторы lblTotal/lblTotalAmount, вероятно, не такие, как вы думаете.

Может попробовать: в <предварительно&ГТ;$("#&ЛТ;%=gridview1, на.Идентификатора ClientID%и GT; .итого").каждый ......&ЛТ;/пре&ГТ;

Но в принципе, просмотрите исходный код страницы и посмотрите, какова структура элементов и какой шаблон вам нужно использовать в качестве селекторов для jQuery (я не эксперт по jQuery, я использую prototype.js)

Andrew Chambers

к сладкому

Martin Arapovic

Да, это так! ClientIDMode="статический" сделает эту работу, но с использованием ClientIDMode="предсказуемый", а не exaclty. Сгенерированный идентификатор будет иметь имя NamingContainer в качестве префикса, я думаю. Хорошо то, что если вы часто используете jquery (javascript), ClientIDMode можно контролировать на странице (в разделе page declerative) или глобальном уровне (раздел web.config pages)...

Martin Arapovic

Если вы не можете заставить свой jquery работать, обновите свой вопрос с помощью сгенерированного html, и мы постараемся заставить ваш селектор jquery работать...

Рейтинг:
1

Shivnandan singh

protected void Page_Load(object sender, EventArgs e)
    {
        DataTable dt = new DataTable();
        dt.Columns.AddRange(new DataColumn[2] { new DataColumn("Item"), new DataColumn("Price") });
        dt.Rows.Add("Shirt", 200);
        dt.Rows.Add("Football", 30);
        dt.Rows.Add("Bat", 22.5);
        GridView1.DataSource = dt;
        GridView1.DataBind();
    }



    <title></title>
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script>
<script type="text/javascript">
    $(function () {
        $("[id*=txtQuantity]").val("0");
    });
    $("[id*=txtQuantity]").live("change", function () {
        if (isNaN(parseInt($(this).val()))) {
            $(this).val('0');
        } else {
            $(this).val(parseInt($(this).val()).toString());
        }
    });
    $("[id*=txtQuantity]").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());
    });
</script>



 <asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="false">
        <Columns>
            <asp:BoundField DataField="Item" HeaderText="Item" />
            <asp:BoundField DataField="Price" HeaderText="Price" ItemStyle-CssClass="price" >
<ItemStyle CssClass="price"></ItemStyle>
            </asp:BoundField>
            <asp:TemplateField HeaderText = "Quantity">
                <ItemTemplate>
                    <asp:TextBox ID="txtQuantity" runat="server"></asp:TextBox>
                </ItemTemplate>
            </asp:TemplateField>
            <asp:TemplateField HeaderText = "Total">
                <FooterTemplate>
                    <asp:Label ID="Label1" runat="server" Text="Label"></asp:Label>
                </FooterTemplate>
                <ItemTemplate>
                    <asp:Label ID="lblTotal" runat="server" Text="0"></asp:Label>
                </ItemTemplate>
            </asp:TemplateField>
        </Columns>
        <FooterStyle BackColor="#99CCFF" />
    </asp:GridView>
    Grand Total:
    <asp:Label ID="lblGrandTotal" runat="server" Text="0"></asp:Label>