TextBoxesを含むListViewがあります。TextBox AI に値を入力すると、計算された値が TextBox B に表示されます。コードビハインドでこれを実行しています。ListView をUpdatePanelに配置するまで、これはうまく機能します。
OnTextChangedで、いくつかの計算/データベース アクションを実行したいと思います (下の例では、挿入された値に 2 を掛けるだけです)。値を入力するたびに完全なPostBackを実行したくないので、UpdatePanel を挿入しました。また、同じスクロール位置に留まりたいからです。
最初に値を入力すると、OnTextChanged メソッドはすべてを正常に実行しますが、2 回目は 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();
}