在文本框的框TextChanged计算总()事件在asp.Net [英] Calculate total on TextBox's TextChanged() event in asp.Net

查看:176
本文介绍了在文本框的框TextChanged计算总()事件在asp.Net的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有如下的小应用程序。

在此物料费率和PO共为只读域。我想通过公式总计算按材料数量的变化(合计=费率*数量)。

对材料数量的框TextChanged()也改变 AuotoPostBack I codeD >真

code我想是如下:

 保护无效txtMQty_TextChanged(对象发件人,EventArgs的发送)
{
 checkTotal();
}//我在的ViewState [率]储蓄率和检索这里。
私人无效checkTotal()
{
 率= Convert.ToInt32(的ViewState [率]);
 txtMQty.Text =的String.Empty;
 如果(速率大于0和放大器;&安培; txtMQty.Text ==的String.Empty)
 {
  txtMRate.Text = Rate.ToString();
  txtTotal.Text = Rate.ToString();
 }
 正则表达式章=新的正则表达式([^ 0-9] + $);
 无功海峡= txtMQty.Text.ToString();
 海峡= reg.Replace(STR,的String.Empty);
 如果(str.Length大于0)
 {
 变种数量= Convert.ToInt32(txtMQty.Text.ToString());
 INT总=(费率*数量);
 txtTotal.Text = total.ToString();
 }
 }

我也是用的UpdatePanel,以避免往返。我的问题是,当我输入量 txtMQty TextChaged()事件应该触发,但它不是射击。没有得到什么是错的。

我的.aspx页面如下图所示。

 < TR>
        < TD类=自动节日礼物>
            材料数量< / TD>
        < TD类=自动都市风情>
            < ASP:文本框ID =txtMQty=服务器WIDTH =87px的AutoPostBack =真OnTextChanged =txtMQty_TextChanged>< / ASP:文本框>< / TD>
        &所述; TD>
            < ASP:的RequiredFieldValidator ID =RFVMQty=服务器前景色=红色显示=动态的ControlToValidate =txtMQty的ErrorMessage =请提供材料数量的ValidationGroup =CreateVal>< / ASP: &的RequiredFieldValidator GT;
            < ASP:RegularEx pressionValidator ID =REVMQty=服务器前景色=红色显示=动态的ControlToValidate =txtMQty的ErrorMessage =请提供数字格式适量ValidationEx pression =^ \\ D + $的ValidationGroup =CreateVal>< / ASP:RegularEx pressionValidator>
        < / TD>
    < / TR>
    &所述; TR>
 &所述; TR>
        < TD类=自动节日礼物>材质率和LT; / TD>
        < TD类=自动都市风情>
            < ASP:的UpdatePanel ID =UpdateRate=服务器>
                <&触发器GT;
                    < ASP:AsyncPostBackTrigger控件ID =txtMQty事件名称=框TextChanged/>
                < /触发器>
                <&的ContentTemplate GT;
            < ASP:文本框ID =txtMRate=服务器WIDTH =87px只读=真>< / ASP:文本框>
                    < /&的ContentTemplate GT;
        < / ASP:的UpdatePanel>
                    < / TD>
        < TD>< / TD>
    < / TR>
    &所述; TR>
        &所述; TD>
            PO总
        < / TD>
        < TD类=自动都市风情>
            < ASP:的UpdatePanel ID =UpdateTotal=服务器>
                <&触发器GT;
                    < ASP:AsyncPostBackTrigger控件ID =txtMQty事件名称=框TextChanged/>
                < /触发器>
                <&的ContentTemplate GT;
            < ASP:文本框ID =txtTotal=服务器WIDTH =87px只读=真>< / ASP:文本框>
                    < /&的ContentTemplate GT;
        < / ASP:的UpdatePanel>
        < / TD>
    < / TR>
    &所述; TR>


解决方案

这是你的问题:


  

您正在使用多个更新面板。并试图触发一个文本框,这不是在UpdatePanel中。发现触发更新面板的内部控制,比给出了一个回发。但是,您的 txtMQty 不是更新面板内。所以触发器将无法正常工作。


如果您使用单面板的更新您的问题将得到解决。请检查下面给我的code。这会为你工作。

 < ASP:的UpdatePanel ID =UpdatePanel1=服务器>
    <&触发器GT;
        < ASP:AsyncPostBackTrigger控件ID =txtMQty事件名称=框TextChanged/>
    < /触发器>
    <&的ContentTemplate GT;
        材料数量
        < ASP:文本框ID =TextBox1的=服务器WIDTH =87px的AutoPostBack =真OnTextChanged =txtMQty_TextChanged>< / ASP:文本框>
        < ASP:的RequiredFieldValidator ID =RequiredFieldValidator1=服务器前景色=红色显示=动态的ControlToValidate =txtMQty的ErrorMessage =请提供材料数量的ValidationGroup =CreateVal>< / ASP: &的RequiredFieldValidator GT;
        < ASP:RegularEx pressionValidator ID =RegularEx pressionValidator1=服务器前景色=红色显示=动态的ControlToValidate =txtMQty的ErrorMessage =请提供数字格式适量ValidationEx pression =^ \\ D + $的ValidationGroup =CreateVal>< / ASP:RegularEx pressionValidator>
        < BR />
        < BR />
        材料费率
        < ASP:文本框ID =TextBox2中=服务器WIDTH =87px只读=真> 5℃/ ASP:文本框>
        < BR />
        < BR />
        PO总
        < ASP:文本框ID =TextBox3=服务器WIDTH =87px只读=真>< / ASP:文本框>
    < /&的ContentTemplate GT;
< / ASP:的UpdatePanel>

这是一个工作HTML设计。

I have a small application as below.

In this Material Rate and PO Total are read only fields. I want to calculate the total as per material quantity changes by formula (Total=Rate*Qty).

I coded on Material Quantity's TextChanged() and also changed AuotoPostBack to True

Code I tried is as below:

protected void txtMQty_TextChanged(object sender, EventArgs e)
{
 checkTotal();
}

//I am saving Rate in ViewState["Rate"] and retrieving here.
private void checkTotal()
{
 Rate = Convert.ToInt32(ViewState["Rate"]);
 txtMQty.Text = string.Empty;
 if (Rate > 0 && txtMQty.Text == string.Empty)
 {
  txtMRate.Text = Rate.ToString();
  txtTotal.Text = Rate.ToString();
 }
 Regex reg = new Regex("[^0-9]+$");
 var str = txtMQty.Text.ToString();
 str = reg.Replace(str, string.Empty);
 if (str.Length > 0)
 {
 var qty = Convert.ToInt32(txtMQty.Text.ToString());
 int total = (Rate* qty);
 txtTotal.Text = total.ToString();
 }
 }

I am also using UpdatePanel to avoid round trip. My problem is when I input Quantity txtMQty's TextChaged() event should fire but it's not firing. Not getting what's wrong.

my .aspx page is as below.

<tr>
        <td class="auto-style3">
            Material Quantity</td>
        <td class="auto-style4">
            <asp:TextBox ID="txtMQty" runat="server" Width="87px" AutoPostBack="True" OnTextChanged="txtMQty_TextChanged"></asp:TextBox></td>
        <td>
            <asp:RequiredFieldValidator ID="RFVMQty" runat="server" ForeColor="Red" Display="Dynamic" ControlToValidate="txtMQty" ErrorMessage="Please provide Material Quantity" ValidationGroup="CreateVal"></asp:RequiredFieldValidator>
            <asp:RegularExpressionValidator ID="REVMQty" runat="server" ForeColor="Red" Display="Dynamic" ControlToValidate="txtMQty" ErrorMessage="Please provide proper Quantity in number format" ValidationExpression="^\d+$" ValidationGroup="CreateVal"></asp:RegularExpressionValidator>
        </td>
    </tr>
    <tr>
 <tr>
        <td class="auto-style3">Material Rate</td>
        <td class="auto-style4">
            <asp:UpdatePanel ID="UpdateRate" runat="server">
                <Triggers>
                    <asp:AsyncPostBackTrigger ControlID="txtMQty" EventName="TextChanged" />
                </Triggers>
                <ContentTemplate>
            <asp:TextBox ID="txtMRate" runat="server" Width="87px" ReadOnly="True"></asp:TextBox>
                    </ContentTemplate>
        </asp:UpdatePanel>
                    </td>
        <td></td>
    </tr>
    <tr>
        <td>
            PO Total
        </td>
        <td class="auto-style4">
            <asp:UpdatePanel ID="UpdateTotal" runat="server">
                <Triggers>
                    <asp:AsyncPostBackTrigger ControlID="txtMQty" EventName="TextChanged" />
                </Triggers>
                <ContentTemplate>
            <asp:TextBox ID="txtTotal" runat="server" Width="87px" ReadOnly="True"></asp:TextBox>
                    </ContentTemplate>
        </asp:UpdatePanel>
        </td>
    </tr>
    <tr>

解决方案

This is your problem :

You are using multiple update Panels. And Trying to Trigger a textbox that's not in the updatepanel. Trigger finds the control inside the update panel and than gives a postback. But your txtMQty is not inside the update panel. So trigger won't work.

If you use single update panels your issue will be resolved. Please check my code given below. This will work for you.

<asp:updatepanel id="UpdatePanel1" runat="server">
    <Triggers>
        <asp:AsyncPostBackTrigger ControlID="txtMQty" EventName="TextChanged" />
    </Triggers>
    <ContentTemplate>
        Material Quantity
        <asp:TextBox ID="TextBox1" runat="server" Width="87px" AutoPostBack="True" OnTextChanged="txtMQty_TextChanged"></asp:TextBox>
        <asp:RequiredFieldValidator ID="RequiredFieldValidator1" runat="server" ForeColor="Red" Display="Dynamic" ControlToValidate="txtMQty" ErrorMessage="Please provide Material Quantity" ValidationGroup="CreateVal"></asp:RequiredFieldValidator>
        <asp:RegularExpressionValidator ID="RegularExpressionValidator1" runat="server" ForeColor="Red" Display="Dynamic" ControlToValidate="txtMQty" ErrorMessage="Please provide proper Quantity in number format" ValidationExpression="^\d+$" ValidationGroup="CreateVal"></asp:RegularExpressionValidator>
        <br />
        <br />
        Material Rate
        <asp:TextBox ID="TextBox2" runat="server" Width="87px" ReadOnly="True" >5</asp:TextBox>
        <br />
        <br />
        PO Total
        <asp:TextBox ID="TextBox3" runat="server" Width="87px" ReadOnly="True"></asp:TextBox>
    </ContentTemplate>
</asp:updatepanel>

This is a working html designer.

这篇关于在文本框的框TextChanged计算总()事件在asp.Net的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆