我有 ListView ,其中包含 TextBoxes 。 当我在TextBox A中输入一个值时,我希望在TextBox B中显示一个计算值。我在CodeBehind中执行此操作。 这很有效,直到我将ListView放在 UpdatePanel 。
中在 OnTextChanged 上,我想做一些计算/数据库操作(在下面的示例中,我只是将插入的值乘以2)。 因为每次输入值时我都不想做完整的 PostBack ,所以我插入了一个UpdatePanel。另外因为我想保持相同的滚动位置。
第一次我输入一个值,OnTextChanged方法会按预期的方式执行所有操作,但第二次 UpdatePanel似乎会删除所有计算值并且只返回第一次插值。
在调试模式下,一切运行良好,也适用于IE8,但不适用于FireFox,Chrome或IE9。 我假设我没有使用UpdatePanel,因为我应该这样做?
aspx页面:
<%@ Page Title="" Language="C#" MasterPageFile="~/MasterPage.master" AutoEventWireup="true" CodeFile="Testing.aspx.cs" Inherits="Sales_NewOrderPOS" ClientIDMode="AutoID"%>
<asp:Content ID="Content1" ContentPlaceHolderID="HeadContent" Runat="Server">
</asp:Content>
<asp:Content ID="Content2" ContentPlaceHolderID="MainContent" Runat="Server">
<asp:ScriptManager ID="ScriptManager1" runat="server">
</asp:ScriptManager>
<asp:UpdatePanel ID="UpdatePanel1" runat="server">
<ContentTemplate>
<asp:ListView ID="ListView1" runat="server" DataSourceID="ObjectDataSource1">
<LayoutTemplate>
<table>
<asp:PlaceHolder runat="server" ID="itemPlaceholder"></asp:PlaceHolder>
</table>
</LayoutTemplate>
<ItemTemplate>
<tr>
<td>
<asp:Label ID="lblItemNo" Text='<%# Eval("ItemNo") %>' runat="server"></asp:Label>
</td>
<td>
<asp:Label ID="lblItemDecription" Text='<%# Eval("ItemDescription") %>' runat="server"></asp:Label>
</td>
<td>
<asp:TextBox ID="txtPalletQuantity" runat="server" Width="30px" OnTextChanged="TextChangedPallet" AutoPostBack="true" ></asp:TextBox>
</td>
<td>
<asp:TextBox ID="txtUnitQuantity" runat="server" Width="30px"></asp:TextBox>
</td>
</tr>
</ItemTemplate>
</asp:ListView>
</ContentTemplate>
</asp:UpdatePanel>
<asp:ObjectDataSource ID="ObjectDataSource1" runat="server" SelectMethod="SP_SelectItems" TypeName="ItemClass">
</asp:ObjectDataSource>
</asp:Content>
代码背后:
protected void Page_Load(object sender, EventArgs e)
{
}
protected void TextChangedPallet(object sender, EventArgs e)
{
TextBox txtPalletQuantity = (TextBox)sender;
ListViewItem item = (ListViewItem)txtPalletQuantity.NamingContainer;
TextBox txtUnitQuantity = (TextBox)item.FindControl("txtUnitQuantity");
txtUnitQuantity.Text = ((Convert.ToDecimal(txtPalletQuantity.Text) * 2)).ToString();
}