【问题标题】:Grid view text box on change it is post back更改后的网格视图文本框回发
【发布时间】:2014-03-26 09:55:00
【问题描述】:

我有一个网格视图。我正在尝试计算一些数值,但是,我的问题是 gridview 被回发。我想避免这种情况。

合同期限 * 合同单位费率 = 合同总额

问题是它转到gridview 的第 1 行。它不应该刷新或回发,它应该停留在我计算的第 10 行。

假设我正在计算 gridview 的第 10 行,那么计算是正确的。

我的代码如下:

 protected void txtContractUnitRate_TextChanged(object sender, EventArgs e)
        {
            successMsg.InnerHtml = string.Empty;
            errorMsg.InnerHtml = string.Empty;

            GridViewRow grow = (GridViewRow)((DataControlFieldCell)((TextBox)sender).Parent).Parent; /*Find Gridview Row Index*/
            TextBox txtContractDuration = (TextBox)grow.FindControl("txtContractDuration");
            TextBox txtContractUnitRate = (TextBox)grow.FindControl("txtContractUnitRate");
            TextBox txtContractTotal = (TextBox)grow.FindControl("txtContractTotal");


            if (txtContractDuration.Text.Trim() == "" || txtContractUnitRate.Text.Trim() == "")
            {
                successMsg.InnerHtml = string.Empty;
                errorMsg.InnerHtml = "<div class=\"errorMsg\">Please fill some digit or 0.</div>";
                return;
            }
            else if (!string.IsNullOrEmpty(txtContractDuration.Text.Trim()) && !Regex.IsMatch(txtContractDuration.Text.Trim(), "^\\d+(\\.\\d{1,2})?$"))
            {
                successMsg.InnerHtml = string.Empty;
                errorMsg.InnerHtml = "<div class=\"errorMsg\">Please enter contractduration and contract unit rate only neumaric with after decimal two digit format like(34.45 or 30) </div>";
                return;
            }

            totalContractAmount = (Convert.ToDecimal(txtContractDuration.Text)) * (Convert.ToDecimal(txtContractUnitRate.Text));
            txtContractTotal.Text = totalContractAmount.ToString();
}

我的 aspx 代码如下:

  <div style="overflow: auto;width:800px">



<asp:UpdatePanel runat="server" ID="UpdatePanel1">
    <ContentTemplate>

        <asp:GridView ID="GridView2" runat="server"  ShowFooter="true"  
                CssClass="tblHeader" Width="100%"
                AutoGenerateColumns="false" BorderWidth="0" BorderColor="Transparent" 
                onrowdatabound="Gridview1_RowDataBound" onrowcommand="Gridview1_RowCommand"   > 
              <Columns>
                  <%-- Remove row number field later --%>



                <asp:TemplateField Visible="false"> 
                <HeaderTemplate>
                <asp:CheckBox ID="cbSelectAll"   runat="server" Text="AllEdit" />
                 </HeaderTemplate>

        <ItemStyle HorizontalAlign="Left" />

         <HeaderStyle HorizontalAlign="Left" />
          <ItemTemplate>
         <asp:CheckBox ID="CheckBox1"   CssClass="chkbox" runat="server" />
         </ItemTemplate>
          </asp:TemplateField> 



                  <asp:TemplateField  HeaderText="Duration" > 
                   <ItemTemplate>
                    <asp:TextBox ID="txtContractDuration" runat="server"  Width="40px"></asp:TextBox> 
                   </ItemTemplate> 
                 </asp:TemplateField> 

                  <asp:TemplateField  HeaderText="Unit Rate" > 
                   <ItemTemplate>


                    <asp:TextBox ID="txtContractUnitRate"  runat="server"  Width="70px" AutoPostBack="True" ontextchanged="txtContractUnitRate_TextChanged" >
                    </asp:TextBox>





                   </ItemTemplate> 



                   </asp:TemplateField> 

                  <asp:TemplateField  HeaderText="Total" > 
                   <ItemTemplate>
                    <asp:TextBox ID="txtContractTotal"  runat="server" Enabled="false"  Width="70px" ></asp:TextBox> 
                   </ItemTemplate> 
                 </asp:TemplateField> 



                 <asp:TemplateField HeaderText="Delete" Visible="false">
                        <ItemTemplate>



                        <asp:LinkButton ID="Delete" runat="server" 
                                CommandName="DeletePMC" OnClientClick="return confirm('Are you sure you want to delete this PMC details?');" CommandArgument="<%# ((GridViewRow) Container).RowIndex %>" Text="Delete" >
                               </asp:LinkButton>


                        </ItemTemplate>

                    </asp:TemplateField>

                </Columns>

                <AlternatingRowStyle BackColor="White" />
                <RowStyle BackColor="#E9E9E9" />
                </asp:GridView>

         </ContentTemplate>



          </asp:UpdatePanel>
                </div>

【问题讨论】:

  • 如果你不想让页面回发,那么在 javascript 中使用你的 make Calculation 函数并在 keyup 上调用它
  • @Nitin: 你能把asp代码和Page_Load C#方法也发一下吗?

标签: asp.net postback


【解决方案1】:

尝试使用 Ajax 更新面板并添加更改事件 像这样的东西

<asp:UpdatePanel ID="UPxxxxxx" runat="server">
<ContentTemplate>
  <asp:GridView ID="GVyyyyyy" runat="server">
     -- your code --
     -- your code --
     -- your code --
  </asp:gridView>
</ContentTemplate>
<trigger>
<asyn...... controlid=.... />
</trigger>
</asp:updatePanel>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多