2016-06-02 18 views
0

Ich habe gridview ich, die 4 Spalten, die ich multiplizieren möchte, Rate zu Menge, um zu erhalten, die ich nicht tue, wie dies tut, bitte helfen Sie mir bitte. hier ist der Codewie man zwei Spalten in gridview multipliziert asp.net C#

<asp:GridView ID="GridView1" runat="server" 
       onrowdatabound="GridView1_RowDataBound" onselectedindexchanged="GridView1_SelectedIndexChanged" 
       > 
       <Columns> 
        <asp:TemplateField HeaderText="Item Name"> 
         <ItemTemplate> 
          <asp:DropDownList ID="cbGvProd" runat="server" Height="16px" Width="200px"> 
          </asp:DropDownList> 
         </ItemTemplate> 
        </asp:TemplateField> 
        <asp:TemplateField HeaderText="Quantity"> 
         <ItemTemplate> 
          <asp:TextBox ID="tbQty" runat="server"></asp:TextBox> 
         </ItemTemplate> 
        </asp:TemplateField> 
        <asp:TemplateField HeaderText="Rate"> 
         <ItemTemplate> 
          <asp:TextBox ID="tbRate" runat="server"></asp:TextBox> 
         </ItemTemplate> 
        </asp:TemplateField> 
        <asp:TemplateField HeaderText="Amount"> 
         <ItemTemplate> 
          <asp:TextBox ID="tbAmount" runat="server"></asp:TextBox> 
         </ItemTemplate> 
        </asp:TemplateField> 
       </Columns> 
      </asp:GridView> 

Code:

protected void Page_Load(object sender, EventArgs e) 
    { 
     SetGrid(); 
    } 
    public void SetGrid() 
    { 

     DataTable tdTemp = new DataTable("TSno"); 
     DataColumn dc = new DataColumn("TDc"); 
     tdTemp.Columns.Add(dc); 

     for (int a = 0; a <= 24; a++) 
     { 
      tdTemp.Rows.Add(a); 
     } 

     tdTemp.AcceptChanges(); 


     GridView1.DataSource = tdTemp; 
     GridView1.DataBind(); 
    } 

    protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e) 
    { 

     for (int i = 0; i < GridView1.Rows.Count; i++) 
     { 
      int qty = Convert.ToInt32(GridView1.Rows[i].Cells[1].ToString()); 
      int rate= Convert.ToInt32(GridView1.Rows[i].Cells[2].ToString()); 

      int total=qty * rate; 
      GridView1.Rows[i].Cells[3].Text = total.ToString(); 

     } 
    } 
+0

['RowDataBound'] (https://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.gridview.rowdatabound (v = vs.110) .aspx) feuert ** Für jede Reihe**. Aus dem bereitgestellten 'GridViewRowEventArgs' können Sie auf die Zeile zugreifen, den Typ überprüfen und die Werte nach Bedarf festlegen. – stuartd

+0

also hast du Fehler oder es funktioniert gar nicht oder? –

+0

@faizan versuchen meine Antwort es wird 100% Arbeit für Sie, aber ersetzen "Menge" & "Preis" mit Ihrem 'DataSet oder DataTable' Spalte Name. – Ansari

Antwort

2

ein Template-Feld hinzufügen insgesamt zu erhalten, keine Notwendigkeit Berechnungen auf RowDataBound

<asp:TemplateField HeaderText="Total"> 
    <ItemTemplate> 
     <asp:Label ID="lblProductTotal" runat="server" 
     Text='<%# ((Convert.ToInt32(Eval("Quantity")))*(Convert.ToInt32(Eval("Price"))))%>'> 
     </asp:Label> 
    </ItemTemplate> 
</asp:TemplateField> 

ersetzen Quantity und Price mit der Säule, was Ihre verwenden, Mittel aus Datensatz oder Datentabelle

Hoffe das wird dir helfen.

+2

Nun, da Ihre Antwort nützlich ist, habe ich den Downvote rückgängig gemacht. – stuartd

0

Im Folgenden finden Sie ein Beispiel mit jQuery. Werfen Sie einen Blick auf den Code unten und verstehen, wie es funktioniert dann Änderungen vornehmen, um Ihre Anwendung

-Code hinter:

public partial class GridTwo : System.Web.UI.Page 
{ 
    protected void Page_Load(object sender, EventArgs e) 
    { 
     List<OrderLineItem> lineItems = new List<OrderLineItem>(); 
     lineItems.Add(new OrderLineItem { Price = 10.00M, Quantity = 0, ItemTotal = 0.00M }); 
     lineItems.Add(new OrderLineItem { Price = 100.00M, Quantity = 0, ItemTotal = 0.00M }); 
     lineItems.Add(new OrderLineItem { Price = 5.00M, Quantity = 0, ItemTotal = 0.00M }); 

     GridView1.DataSource = lineItems; 
     GridView1.DataBind(); 
    } 
} 

public class OrderLineItem 
{ 
    public decimal Price { get; set; } 
    public int Quantity { get; set; } 
    public decimal ItemTotal { get; set; } 
} 

.ASPX:

<head runat="server"> 
    <title></title> 
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.3/jquery.min.js"></script> 
    <script type="text/javascript"> 
     $(function() { 

      $(".QuantityClass").on('change keyup paste', function() { 

       //Ctrl+Shift+J in Google Chrome to bring up the console which allows you to debug javascript 
       debugger; 

       var textBox = this; 
       var quantity = $(textBox).val(); 
       var tableRows = $(textBox).parent().parent().children(); 

       if (quantity != "") { 
        var price = tableRows[0].children[0].innerHTML; 

        var itemTotal = price * quantity; 

        tableRows[2].children[0].innerHTML = itemTotal; 
       } 
       else 
        tableRows[2].children[0].innerHTML = ""; 
      }); 
     }); 
    </script> 
</head> 
<body> 
    <form id="form1" runat="server"> 
     <asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="false"> 
      <Columns> 
       <asp:TemplateField HeaderText="Price"> 
        <ItemTemplate> 
         <asp:Label ID="lblPrice" runat="server" Text='<%# Bind("Price")%>'></asp:Label> 
        </ItemTemplate> 
       </asp:TemplateField> 
       <asp:TemplateField HeaderText="Quantity"> 
        <ItemTemplate> 
         <asp:TextBox ID="txtQuantity" CssClass="QuantityClass" runat="server" Text='<%# Bind("Quantity")%>'></asp:TextBox> 
        </ItemTemplate> 
       </asp:TemplateField> 
       <asp:TemplateField HeaderText="Item Total"> 
        <ItemTemplate> 
         <asp:Label ID="lblItemTotal" runat="server"></asp:Label> 
        </ItemTemplate> 
       </asp:TemplateField> 
      </Columns> 
     </asp:GridView> 
    </form> 
</body> 

Ausgang:

Calculating two gridview columns client side

Verwandte Themen