2011-11-01 3 views
0

Je veux effectuer le calcul dans un GridView:Exécution Calcul Dans Gridview ItemTemplate

NetAmount = (ServiceAmount * Quantity) * Discount 

j'avais code écrit en RowDataBound mais il ne fonctionne pas. Quelqu'un peut-il m'aider à résoudre ce problème? J'apprécierais que quelqu'un partage ses connaissances.

mon code Aspx:

<asp:GridView ID="GridView1" runat="server" Height="156px" Width="618px" 
    AutoGenerateColumns="False" BorderWidth="1px" 
    HorizontalAlign="Justify" onrowdatabound="GridView1_RowDataBound" 
    BackColor="LightGoldenrodYellow" BorderColor="Tan" CellPadding="2" 
    ForeColor="Black" GridLines="None" onrowcommand="GridView1_RowCommand"> 

    <FooterStyle BackColor="Tan" /> 
    <PagerStyle BackColor="PaleGoldenrod" ForeColor="DarkSlateBlue" HorizontalAlign="Center" /> 
     <SelectedRowStyle BackColor="DarkSlateBlue" ForeColor="GhostWhite" /> 
     <HeaderStyle BackColor="#FFFFC4" Font-Bold="True" ForeColor="#BF6000"/> 
     <Columns> 
      <!-- snip --> 
      <asp:TemplateField HeaderText="Net Amt"> 
       <ItemTemplate> 
        <asp:TextBox ID="TxtNetAmt" ReadOnly="true" Font-Bold="true" ForeColor="#BF6000" runat="server" Width="55px"></asp:TextBox> 
       </ItemTemplate> 
      </asp:TemplateField> 
     </Columns> 
    <AlternatingRowStyle BackColor="PaleGoldenrod" /> 
</asp:GridView> 


<script type="text/javascript"> 
    function CalcSercode(ServiceAmount,Quantity, Discount,NetAmount) 
    { 
     var Quantity=parseFloat(document.getElementById(Quantity).value); 
     var Discount= parseFloat(document.getElementById(Discount).value); 
     var ServiceAmount=document.getElementById(ServiceAmount); 
     var SerAmountValue = parseFloat((ServiceAmount * Quantity)-((ServiceAmount *Quantity)*Discount/100)); 
     //var SellPriceValueRound = Math.round(SellPriceValue,4); 
     var SerAmountValueRound = SerAmountValue; 
     ServiceAmount.innerHTML= SerAmountValueRound ; 
    } 
</script> 

Code Mon cs:

//TextBox TxtServiceCode = GridView1.Controls[0].Controls[0].FindControl("TxtServiceCode") as TextBox; 
//DataSet dss = new DataSet(); 
//SqlConnection MyConnection = new SqlConnection("server=prog; database=mydatabase;UID=sa;PWD=naco123;"); 
//SqlCommand sqlcmd = new SqlCommand("select * from [ServiceCode]", MyConnection); 
//SqlDataAdapter adp = new SqlDataAdapter(sqlcmd); 
//DataSet ds = new DataSet(); 
//adp.Fill(ds); 
//GridView1.DataSource = ds.Tables[0]; 
//GridView1.DataBind(); 
+0

Pouvez-vous isoler le problème à l'aide d'un débogueur et spécifiez-le? – user973511

+0

thaks pour la réponse monsieur, mon datarowcommand ne tire pas et mon javascript ne fonctionne pas aussi me suggèrent monsieur ...... – Rizwan

Répondre

0

En général, je vous conseille de faire ce calcul pas au frontend mais soit dans une couche d'affaires ou comme dans votre cas, vous ne semblez pas en avoir un et aller directement à la base de données. Donc, n'ajoutez pas NetAmount = (ServiceAmount * Quantity) * Discount à votre instruction select. Si vous le faites, vous pouvez simplement DataBind cette colonne à votre grille, car il est de toute façon en lecture seule

+0

merci pour la réponse monsieur, je fais les calculs du côté client pouvez-vous explorer ci-dessus concept ci-dessus ........ – Rizwan

+0

oui, mais vous avez une logique métier en javascript - ce sera difficile à maintenir et si le javascript n'est pas activé, cela ne fonctionnera pas du tout. Donc, c'est le mauvais endroit pour les exécuter. – Pleun

1

Vous devriez être en mesure de faire ce calcul avec la syntaxe de liaison de données en ligne:

<ItemTemplate> 
    <%# ((Convert.ToDecimal(Eval("ServiceAmount")) * Convert.ToInt32(Eval("Quantity"))) * Convert.ToDecimal(Eval("Discount"))).ToString("C") %> 
</ItemTemplate> 
+0

merci pour la réponse monsieur, ma commande datarow ne se déclenche pas est ce code correct s'il vous plaît corriger le code et le javascript ..... – Rizwan

Questions connexes