2012-04-12 2 views
3

Привет всем Я написал следующий скрипт, чтобы получить значение из textbox, которое находится в GridView, но я получаю некоторое значение как NaN может кто-то сказать, где я заладилосьКак получить текстовое значение из текстового поля, которое находится в Gridview, используя Javascript

Это мой пример сценария

var grid = document.getElementById("<%=grdInvoice.ClientID%>"); 
      var inputs = grid.getElementsByTagName("input"); 
      for (var i = 0; i < inputs.length; i++) { 
       if (inputs[i].type == "text") { 
        if (inputs[i].name.indexOf("txtAmount").value != "") { 
         alert("Not Null"); 
         amnt = parseInt(inputs[i].name.indexOf("txtAmount").value); 
         alert(amnt.toString()); // Getting Nan here 
         //var v = document.getElementById('<%= lblTotal.ClientID %>').value; 
        } 
       } 
      } 

Моя сетка выглядит следующим образом

ddl Quantity desc  Rate Amount 
     1   d  10  10 
     2   d  20  40 

Как что некоторые пустые строки тоже будет там мне нужно просуммировать Amount и дисплей

Мой вид сетки

<asp:GridView ID="grdInvoice" runat="server" AutoGenerateColumns="False" GridLines="None" 
         Width="650px" CellPadding="2" CellSpacing="1" ForeColor="#333333" CssClass="inv_grid_data" 
         OnSelectedIndexChanged="grdInvoice_SelectedIndexChanged" OnSelectedIndexChanging="grdInvoice_SelectedIndexChanging" 
         Style="font-family: verdana; font-size: 9px;"> 
         <RowStyle BackColor="#f1f1f2" ForeColor="#333333" BorderColor="#333333" BorderStyle="Solid" 
          BorderWidth="1px" /> 
         <HeaderStyle CssClass="inv_grid_hed" BackColor="#f2f2f2" ForeColor="black" Font-Names="Verdana,Arial,Helvetica,sans-serif" 
          Font-Size="9px" Height="15px" Font-Bold="false" /> 
         <AlternatingRowStyle CssClass="tr2" BackColor="White" ForeColor="#284775" /> 
         <Columns> 
          <asp:TemplateField HeaderText="Item Name" HeaderStyle-Width="140"> 
           <ItemTemplate> 
            <asp:DropDownList ID="ddlItems" runat="server" AutoPostBack="True" OnSelectedIndexChanged="ddlItems_SelectedIndexChanged" 
             DataTextField="LineItemName" DataValueField="LineItemName" CssClass="txt_box_ssm_drop" 
             Width="100%" Font-Names="Verdana,Arial,Helvetica,sans-serif" Font-Size="12px"> 
            </asp:DropDownList> 
           </ItemTemplate> 
           <HeaderStyle Width="180px" /> 
          </asp:TemplateField> 
          <asp:TemplateField HeaderText="Quantity"> 
           <ItemTemplate> 
            <asp:TextBox ID="txtQuantity" CssClass="txt_box_ssm_big" runat="server" Width="100%"></asp:TextBox> 
           </ItemTemplate> 
           <HeaderStyle Width="100px" /> 
          </asp:TemplateField> 
          <asp:TemplateField HeaderText="Description"> 
           <ItemTemplate> 
            <asp:TextBox ID="txtDescription" CssClass="txt_box_ssm_big" runat="server" Width="100%"></asp:TextBox> 
           </ItemTemplate> 
           <%--<ItemStyle Height="11px" Width="100px" /> --%> 
           <HeaderStyle Width="260px" /> 
          </asp:TemplateField> 
          <asp:TemplateField HeaderText="Rate"> 
           <ItemTemplate> 
            <asp:TextBox ID="txtRate" ReadOnly="true" CssClass="txt_box_ssm_big" runat="server" 
             Width="100%"></asp:TextBox> 
           </ItemTemplate> 
           <HeaderStyle Width="100px" /> 
          </asp:TemplateField> 
          <asp:TemplateField HeaderText="Amount"> 
           <ItemTemplate> 
            <asp:TextBox ID="txtAmount" runat="server" CssClass="txt_box_ssm_big" Width="100%"></asp:TextBox> 
            <%--<asp:Label ID="lblamount" runat="server" Text='<%# Eval("Amount") %>'/>--%> 
           </ItemTemplate> 
           <HeaderStyle Width="100px" /> 
          </asp:TemplateField> 
          <asp:TemplateField HeaderText="Delete"> 
           <ItemTemplate> 
            <%--<asp:ImageButton ID="ImageButton2" runat="server" ImageUrl="~/images/icon_delete.gif" OnClick="RowDelete_Click" OnClientClick="msg('Can you get there from here?','This is a Title')"/>--%> 
            <asp:ImageButton ID="RowDelete" runat="server" ImageUrl="~/images/icon_delete.gif" 
             OnClick="RowDelete_Click" OnClientClick="return showConfirm()" Style="margin-left: 15px;" /> 
           </ItemTemplate> 
          </asp:TemplateField> 
          <asp:CommandField ShowSelectButton="true" ButtonType="image" SelectImageUrl="~/Invoiceimages/Copy-32(1).png" 
           SelectText="Copy" HeaderText="Copy" /> 
         </Columns> 
         <FooterStyle BackColor="#5D7B9D" Font-Bold="True" ForeColor="White" /> 
         <PagerStyle BackColor="#284775" ForeColor="White" HorizontalAlign="Center" /> 
         <SelectedRowStyle BackColor="#E2DED6" Font-Bold="True" ForeColor="#333333" /> 
         <EditRowStyle BackColor="#999999" /> 
        </asp:GridView> 

Мой оригинальный сценарий изначально я добавлю СУММА в виде сетки, основываясь на количестве пользователя после того, как что я как отображать общее количество в сетке до метки

<script type="text/javascript"> 
     function multiplication(txtQuantity, txtRate, txtAmount) { 
      var weight = document.getElementById(txtQuantity).value; 
      var rate = document.getElementById(txtRate).value; 
      document.getElementById(txtAmount).value = weight * rate; 
      var amnt = 0; 
//   var Grid_Table = document.getElementById('<%= grdInvoice.ClientID %>'); 
//   for (var row = 1; row < Grid_Table.rows.length; row++) { 

//    var qty = 0; 

//    for (var col = 0; col < Grid_Table.rows[row].cells.length; col++) { 

//     var cellcollectin = Grid_Table.rows[row].cells[col]; 

//     for (var j = 0; j < cellcollectin.childNodes.length; j++) { 

//      if (cellcollectin.childNodes[j].type == "text") { 

//       if (cellcollectin.childNodes[j].name.indexOf("txtAmount") > 1) { 
//        if (cellcollectin.childNodes[j].value != "") { 
//         qty = parseInt(cellcollectin.childNodes[j].value); 
//         amnt = amnt + qty; 
//        } 
//       } 
//      } 
//     } 
//    } 
//   } 
         var grid = document.getElementById("<%=grdInvoice.ClientID%>"); 
         var inputs = grid.getElementsByTagName("input"); 
         for (var i = 0; i < inputs.length; i++) { 
          if (inputs[i].type == "text") { 
           if (inputs[i].name.indexOf("txtAmount").value != "") { 
            alert("Not Null"); 
            amnt = grid.rows[i].cells[1].childNodes[0].value; 
            //amnt = parseInt(inputs[i].name.indexOf("txtAmount").value); 
            alert(amnt.toString()); 
            //var v = document.getElementById('<%= lblTotal.ClientID %>').value; 
           } 
          } 
         } 
      document.getElementById('<%= lblTotal.ClientID %>').innerHtml = amnt.toString(); 
     } 
    </script> 
+0

Возможно, вы разобрали строковое значение в целое число. Это может быть причиной –

+0

С отсутствием 'ParseInt' Я не получаю никакого предупреждения – Dotnet

+0

Перед конвертированием попытайтесь предупредить входы [i] .name .indexOf ("txtAmount"). Значение –

ответ

4

Ведь вот решение

<script type="text/javascript"> 
    function multiplication(txtQuantity, txtRate, txtAmount) { 
     var col1; 
     var totalcol1 = 0; 
     var weight = document.getElementById(txtQuantity).value; 
     var rate = document.getElementById(txtRate).value; 
     document.getElementById(txtAmount).value = weight * rate; 
     var grid = document.getElementById('<%=grdInvoice.ClientID %>'); 


     for (i = 0; i < grid.rows.length; i++) { 
      col1 = grid.rows[i].cells[4]; 
      //col2 = grid.rows[i].cells[1]; 

      for (j = 0; j < col1.childNodes.length; j++) { 
       if (col1.childNodes[j].type == "text") { 
        if (!isNaN(col1.childNodes[j].value) && col1.childNodes[j].value != "") { 
         totalcol1 += parseInt(col1.childNodes[j].value) 
        } 
       } 
      } 
     } 
     document.getElementById('<%= lblTotal.ClientID %>').innerHTML = totalcol1.toFixed(2).toString(); 
    } 
</script> 
0

Я думаю, что метод, который вы используете, неверен. лучше использовать что-то, как ниже:

var inputs = grid.getElementsByTagName("input"); 
var grid = document.getElementById('<%= grdInvoice.ClientID %>'); 

for (var i = 0; i < inputs.length; i++) { 
    if (inputs[i].type == "text") {   
     amnt = parseInt(grid.rows[i].cells[2].childNodes[0].value;); 
     alert(amnt.toString()); // Getting Nan here 
     //var v = document.getElementById('<%= lblTotal.ClientID %>').value; 
    } 
} 
+0

Не представлено ни одного значения Я хотел бы прокрутить текстовые поля, доступные в виде сетки – Dotnet

+0

Проверить мое обновление в моем вопросе один раз – Dotnet

+0

Пожалуйста, попробуйте это ... –

1

Существует проблема в коде, в JavaScript indexOf() либо возвращает -1 или целое положительное число, value это свойство ввода текстового поля и не имеет ничего общего с indexOf().

Заменить код с этим:

var grid = document.getElementById("<%=grdInvoice.ClientID%>"); 
    var inputs = grid.getElementsByTagName("input"); 
    for (var i = 0; i < inputs.length; i++) { 
     if (inputs[i].type == "text") { 
      if (inputs[i].name == "txtAmount" || inputs[i].id == "txtAmount") { 
       amnt = parseInt(inputs[i].value); 
       alert(amnt.toString()); 
      } 
     } 
    } 
+0

Это не работает – Dotnet

+0

Где проблема? Меня устраивает. – Coder

+0

У меня есть главная страница с gridview, тогда это правильный способ поиска 'if (input [i] .name ==" txtAmount ")' – Dotnet

0

Текст внутри GridView

<asp:GridView ID ="grvAddItems" runat="server"> 
<asp:TemplateField HeaderText="Quantity"> 
      <ItemTemplate> 
       <asp:TextBox CssClass="field-text1" Width="70 px" ID="txtQuantity" runat="server" TextMode="Number" onblur="findcontrol()"></asp:TextBox> 
      </ItemTemplate> 
      </asp:TemplateField> 
</asp:GridView> 

Javascript код

function findcontrol() 
     { 
      var textBoxQuantity = document.getElementsByClassName("field-text1"); 
for (var i = 0; i < textBoxQuantity.length; i++) { 
       findvalue(textBoxQuantity[i].id); 
      } 
     } 
function findvalue() 
{ 
var Quantity = document.getElementById(quantity).value; 
if (Number(Quantity) > 0){ 
// your calculations here 
} 
+0

Пожалуйста, объясните свой код и разместите его. – Shiro