#c# #asp.net
#c# #asp.net
Вопрос:
Я хочу выполнить вычисление в GridView
:
NetAmount = (ServiceAmount * Quantity) * Discount
Я написал код, RowDataBound
но он не работает. Может кто-нибудь помочь мне решить эту проблему? Я был бы признателен, если бы кто-нибудь поделился своими знаниями.
мой 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>
Мой 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();
Комментарии:
1. Можете ли вы изолировать проблему с помощью отладчика и указать ее?
2. спасибо за ответ, сэр, моя команда datarowcommand не запускается, и мой javascript также не работает, предложите мне, сэр……
Ответ №1:
Вы должны быть в состоянии выполнить это вычисление с помощью встроенного синтаксиса привязки данных:
<ItemTemplate>
<%# ((Convert.ToDecimal(Eval("ServiceAmount")) * Convert.ToInt32(Eval("Quantity"))) * Convert.ToDecimal(Eval("Discount"))).ToString("C") %>
</ItemTemplate>
Комментарии:
1. спасибо за ответ, сэр, моя команда datarowcommand не запускается, правильный ли этот код, пожалуйста, исправьте код и javascript…..
Ответ №2:
В общем, я бы посоветовал вам выполнить это вычисление не на интерфейсе, а либо на бизнес-уровне, либо, как в вашем случае, у вас, похоже, его нет, и перейти прямо к базе данных.
Поэтому не добавляйте значение NetAmount=(ServiceAmount * Количество) * Скидка в ваш оператор select. Если вы это сделаете, вы можете просто привязать этот столбец к своей сетке, поскольку он в любом случае доступен только для чтения
Комментарии:
1. спасибо за ответ, сэр, я выполняю вычисления на стороне клиента, можете ли вы изучить вышеуказанную концепцию……..
2. да, но у вас есть бизнес-логика в javascript — это будет сложно поддерживать, и если у них не включен javascript, он вообще не будет работать. Так что это неподходящее место для их выполнения.