0

我有一个带有TextBoxes的ListView。当我在 TextBox 中输入一个值时,AI 希望在 TextBox B 中显示一个计算值。我在 CodeBehind 中执行此操作。在我将 ListView 放在UpdatePanel之前,这很有效。

OnTextChanged上,我想做一些计算/数据库操作(在下面的示例中,我只是将插入的值乘以 2)。由于我不想在每次输入值时都执行完整的PostBack ,因此我插入了一个 UpdatePanel。也因为我想保持在相同的滚动位置。

我第一次输入一个值时,OnTextChanged 方法会做所有事情,但第二次UpdatePanel 似乎删除了所有计算值并且只返回第一个插入的值。

在调试模式下一切正常,在 IE8 中也是如此,但在 FireFox、Chrome 或 IE9 中则不行。我假设我没有像我应该那样使用 UpdatePanel?

页面:

<%@ 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();
}  
4

0 回答 0