В минувшие выходные, помогая одному из моих друзей по его проекту, мне нужно было выполнить на уровне строк на стороне клиента, операции на asp.net GridView. Во-первых, я искал поиски чего-то похожего на «формулы в excel» для asp gridview. Когда мне не удалось найти что-то хорошее, я решил пойти с javascript для выполнения операции на стороне клиента в отдельных сетчатых строках.
Мой сценарий состоял из генерации счета-фактуры, где требовалось добавлять строки (по одному для каждого выбранного продукта) динамически, а затем выполнять некоторые вычисления, например, отображать общую сумму строк. При нажатии кнопки «Добавить» добавляется новая запись для элемента, выбранного в раскрывающемся списке (это делается из кода на стороне сервера). Здесь пользователь может вводить значения в любом из текстовых полей. И система должна обновить значения в текстовом поле столбца Total Excessible Value (см. Изображение ниже) соответственно.
Для этого я написал две простые функции javascript и назвал их onchange событием текстового поля. Ниже приведены вид сетки и код jQuery, которые я использовал.
(Нажмите, чтобы увеличить)
GridView, который я использовал, был ниже:
<asp:GridView ID="gdvInvoiceItems" runat="server" AutoGenerateColumns="False" ShowHeader="true"
OnRowCommand="gdvInvoiceItems_RowCommand">
<EmptyDataTemplate>
No items added yet.
EmptyDataTemplate>
<Columns>
<asp:TemplateField HeaderText="S No.">
<ItemTemplate>
<%# Container.DataItemIndex + 1 %>
<asp:HiddenField ID="hdnItemId" runat="server" Value='<%# Eval("Id") %>' />
ItemTemplate>
asp:TemplateField>
<asp:TemplateField HeaderText="Description of Goods" ItemStyle-CssClass="description">
<ItemTemplate>
<asp:TextBox ID="txtDescription" runat="server" Text='<%# Eval("Description") %>'
CssClass="txtDescStyle">asp:TextBox>
ItemTemplate>
asp:TemplateField>
<asp:TemplateField HeaderText="Quantity(Net)" ItemStyle-CssClass="quantity">
<ItemTemplate>
<asp:TextBox ID="txtQuantity" runat="server" Text='<%# Eval("Quantity") %>' onchange="javascript:Multiply(this, this.value)">asp:TextBox>
ItemTemplate>
asp:TemplateField>
<asp:TemplateField HeaderText="Value Per Unit" ItemStyle-CssClass="value">
<ItemTemplate>
<asp:TextBox ID="txtValue" runat="server" Text='<%# Eval("PerUnitValue") %>' onchange="javascript:Multiply(this, this.value)">asp:TextBox>
ItemTemplate>
asp:TemplateField>
<asp:TemplateField HeaderText="Total Exesible Value" ItemStyle-CssClass="exesiblevalue">
<ItemTemplate>
<asp:TextBox ID="txtTotalExeValue" runat="server" Text='<%# Eval("Total") %>' CssClass="TotalExeValue">asp:TextBox>
ItemTemplate>
asp:TemplateField>
<asp:TemplateField>
<ItemTemplate>
<asp:LinkButton ID="lnkBtnRemove" runat="server" Text="Remove" ItemStyle-CssClass="remove">
asp:LinkButton>
ItemTemplate>
asp:TemplateField>
Columns>
asp:GridView>
JavaScript код используется:
<script type="text/javascript">
//This method is called when quantity/cost textbox looses focus with some change in content
function Multiply(element, val)
{
var otherElementName = '';
var finalElementName = '';
//id of calling element i.e, quantity/cost textbox
var elementName = element.id;
//get second element, i.e., get quantity if change is in cost and vice-versa
if(endsWith(elementName, "txtQuantity"))
{
otherElementName = elementName.replace("txtQuantity", "txtValue");
}
else if(endsWith(elementName, "txtValue"))
{
otherElementName = elementName.replace("txtValue", "txtQuantity");
}
var otherElement = document.getElementById(otherElementName);
//get textbox where final value is to be displayed
finalElementName = elementName.replace("txtValue", "txtTotalExeValue")
var finalElement = document.getElementById(finalElementName);
finalElement.value = otherElement.value * val;
}
//checks if given string ends with given suffix
function endsWith(str, suffix) {
return str.indexOf(suffix, str.length - suffix.length) !== -1;
}
script>
Выделенные линии OnChange = "JavaScript: Multiply (это, это .value) "- это тот, который делает магию. Это событие onchange не приходит в intellisense, но оно работает.
добавить код и разметку у вас есть – vittore
Также проверьте эту статью, вам не нужно «копировать» что-либо http://msdn.microsoft.com/en-us/library/ms972948.aspx – vittore
И если бы вы могли , добавьте описание того, что работает и что не работает. Это поможет нам понять, какая часть кода может быть нарушена. – Trendy