简体   繁体   中英

Textbox Inside GridView Inside UpdatePanel textchange Event not firing

I have an UpdatePanel with a GridView. This GridView has a template column that is a textbox. The problem is that the textchange event does not fire for the textbox.

Where am I wrong?

Here is the code:

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="WebForm1.aspx.cs" Inherits="updatepanelgridview.WebForm1" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>
</head>
<body>
    <form id="form1" runat="server">
    <div>
    <asp:ScriptManager ID="scrManager" runat="server"> 
</asp:ScriptManager> 
<asp:UpdatePanel ID="updPnl" runat="server"> 
<ContentTemplate> 
<asp:GridView ID="grdNumber" runat="server"> 
<Columns> 
<asp:TemplateField> 
<ItemTemplate> 

<asp:TextBox ID="txtNumber" runat="server" OnTextChanged="TextBox1_TextChanged"  AutoPostBack="true"></asp:TextBox>
</ItemTemplate> 
</asp:TemplateField> 
</Columns> 

<Columns> 
<asp:TemplateField> 
<ItemTemplate> 
<asp:DropDownList ID="ddlNumber" runat="server" OnSelectedIndexChanged="ddlNumber_SelectedIndexChanged" AutoPostBack="true" > 

<asp:ListItem>One</asp:ListItem> 
<asp:ListItem>Two</asp:ListItem> 
<asp:ListItem>Three</asp:ListItem> 
<asp:ListItem>For</asp:ListItem> 
</asp:DropDownList> 

</ItemTemplate> 
</asp:TemplateField> 
</Columns> 
</asp:GridView> 
</ContentTemplate> 
</asp:UpdatePanel> 

    </div>
    </form>
</body>
</html>

And here is the codebehind:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Data;
namespace updatepanelgridview
{
    public partial class WebForm1 : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {
                DataTable dt = new DataTable();
                dt.Rows.Add();
                dt.Rows.Add();
                dt.Rows.Add();
                dt.Rows.Add();

                grdNumber.DataSource = dt;
                grdNumber.DataBind();
            }
        }

        protected void ddlNumber_SelectedIndexChanged(object sender, EventArgs e)
        {

        }

        protected void TextBox1_TextChanged(object sender, EventArgs e)
        {

        }
    }
}

Here i use dropdownlist in second column which works proper but my textbox textchange event not getting fir please suggest what i am doing wrong?

Set the update mode property of update panel to Always.

<asp:UpdatePanel ID="updPnl" runat="server" UpdateMode="Always">

In the code behind file under TextBox1_TextChanged event, you can get the latest value using sender.text property.

If you set updateMode to conditional, in that case you need to add Triggers.

--------------------- This is the code I tried and its working------------------

<%@ Page Title="About Us" Language="C#" MasterPageFile="~/Site.master" AutoEventWireup="true"
    CodeFile="About.aspx.cs" Inherits="About" %>

<asp:Content ID="HeaderContent" runat="server" ContentPlaceHolderID="HeadContent">
</asp:Content>
<asp:Content ID="BodyContent" runat="server" ContentPlaceHolderID="MainContent">
    <div>
        <asp:ScriptManager ID="scrManager" runat="server">
        </asp:ScriptManager>
        <asp:UpdatePanel ID="updPnl" runat="server" >

            <ContentTemplate>
                <asp:GridView ID="grdNumber" runat="server">
                    <Columns>
                        <asp:TemplateField>
                            <ItemTemplate>
                                <asp:TextBox ID="txtNumber" runat="server" OnTextChanged="TextBox1_TextChanged" AutoPostBack="true"></asp:TextBox>
                            </ItemTemplate>
                        </asp:TemplateField>
                    </Columns>
                    <Columns>
                        <asp:TemplateField>
                            <ItemTemplate>
                                <asp:DropDownList ID="ddlNumber" runat="server" OnSelectedIndexChanged="ddlNumber_SelectedIndexChanged"
                                    AutoPostBack="true">
                                    <asp:ListItem>One</asp:ListItem>
                                    <asp:ListItem>Two</asp:ListItem>
                                    <asp:ListItem>Three</asp:ListItem>
                                    <asp:ListItem>For</asp:ListItem>
                                </asp:DropDownList>
                            </ItemTemplate>
                        </asp:TemplateField>
                    </Columns>
                </asp:GridView>
            </ContentTemplate>
        </asp:UpdatePanel>
    </div>
</asp:Content>


using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Data;

public partial class About : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack)
        {
            DataTable dt = new DataTable();
            dt.Rows.Add();
            dt.Rows.Add();
            dt.Rows.Add();
            dt.Rows.Add();

            grdNumber.DataSource = dt;
            grdNumber.DataBind();
        }
    }

    protected void ddlNumber_SelectedIndexChanged(object sender, EventArgs e)
    {

    }

    protected void TextBox1_TextChanged(object sender, EventArgs e)
    {
        var value = (sender as TextBox).Text;
    }
}

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM