In this article I will explain with an example and attached sample code, how to use and implement ASP.Net AJAX FilteredTextBoxExtender Control for TextBox in GridView Row EditItemTemplate to validate and prevent user entering invalid input.
 
 
Using the ASP.Net AJAX FilterTextBoxExtender control
1. Drag an ASP.Net AJAX ScriptManager on the page.
2. Register the AJAX Control Toolkit Library after adding reference to your project
 
<%@ Register Assembly="AjaxControlToolkit" Namespace="AjaxControlToolkit" TagPrefix="cc1" %>
 
 
Adding ASP.Net AJAX FilteredTextBoxExtender to the ASP.Net GridView Control EditItemTemplate
In the below GridView I have a simple GridView with 2 Columns for the Item and other for the Quantity. The Quantity Column is Editable hence I have added an ASP.Net AJAX FilteredTextBoxExtender to the Quantity TextBox in the EditItemTemplate of the GridView, so that user can enter only Numbers or Digits.
<cc1:ToolkitScriptManager ID="ToolkitScriptManager1" runat="server">
</cc1:ToolkitScriptManager>
<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="false" OnRowEditing="OnRowEditing" OnRowCancelingEdit = "OnRowCancelingEdit" OnRowUpdating = "OnRowUpdating">
    <Columns>
        <asp:BoundField DataField="Item" ReadOnly="true" HeaderText = "Item" />
        <asp:TemplateField HeaderText = "Quantity">
            <ItemTemplate>
                <asp:Label ID="lblQuantity" runat="server" Text='<%#Eval("Quantity") %>'></asp:Label>
            </ItemTemplate>
            <EditItemTemplate>
                <asp:TextBox ID="txtQuantity" runat="server" Text='<%#Eval("Quantity") %>'></asp:TextBox>
                <cc1:FilteredTextBoxExtender ID="FilteredTextBoxExtender1" runat="server" FilterType="Numbers"
                    TargetControlID="txtQuantity" />
            </EditItemTemplate>
        </asp:TemplateField>
        <asp:CommandField ButtonType="Link" ShowEditButton="true" />
    </Columns>
</asp:GridView>
 
 
Namespaces
You will need to import the following namespaces.
C#
using System.Data;

VB.Net
Imports System.Data
 
 
ASP.Net GridView Binding Editing and Updating
Below is the code to bind the GridView and also to handle the Edit, Update and Cancel events.
C#
protected void Page_Load(object sender, EventArgs e)
{
    if (!Page.IsPostBack)
    {
        DataTable dt = new DataTable();
        dt.Columns.AddRange(new DataColumn[2] { new DataColumn("Item"), new DataColumn("Quantity") });
        dt.Rows.Add("Shirt", 450);
        dt.Rows.Add("Jeans", 3200);
        dt.Rows.Add("Trousers", 1900);
        dt.Rows.Add("Tie", 185);
        dt.Rows.Add("Cap", 100);
        dt.Rows.Add("Hat", 120);
        dt.Rows.Add("Scarf", 290);
        dt.Rows.Add("Belt", 150);
        ViewState["dt"] = dt;
        BindGrid();
    }
}
 
private void BindGrid()
{
    GridView1.DataSource = ViewState["dt"] as DataTable;
    GridView1.DataBind();
}
 
protected void OnRowEditing(object sender, GridViewEditEventArgs e)
{
    GridView1.EditIndex = e.NewEditIndex;
    this.BindGrid();
}
 
protected void OnRowCancelingEdit(object sender, GridViewCancelEditEventArgs e)
{
    GridView1.EditIndex = -1;
    this.BindGrid();
}
 
protected void OnRowUpdating(object sender, GridViewUpdateEventArgs e)
{
    TextBox txtQuantity = GridView1.Rows[e.RowIndex].FindControl("txtQuantity") as TextBox;
    DataTable dt = ViewState["dt"] as DataTable;
    dt.Rows[e.RowIndex]["Quantity"] = !string.IsNullOrEmpty(txtQuantity.Text) ? txtQuantity.Text : "0";
    ViewState["dt"] = dt;
    GridView1.EditIndex = -1;
    this.BindGrid();
}
 
VB.Net
Protected Sub Page_Load(sender As Object, e As EventArgs) Handles Me.Load
    If Not Page.IsPostBack Then
        Dim dt As New DataTable()
        dt.Columns.AddRange(New DataColumn(1) {New DataColumn("Item"), New DataColumn("Quantity")})
        dt.Rows.Add("Shirt", 450)
        dt.Rows.Add("Jeans", 3200)
        dt.Rows.Add("Trousers", 1900)
        dt.Rows.Add("Tie", 185)
        dt.Rows.Add("Cap", 100)
        dt.Rows.Add("Hat", 120)
        dt.Rows.Add("Scarf", 290)
        dt.Rows.Add("Belt", 150)
        ViewState("dt") = dt
        BindGrid()
    End If
End Sub
 
Private Sub BindGrid()
    GridView1.DataSource = TryCast(ViewState("dt"), DataTable)
    GridView1.DataBind()
End Sub
 
Protected Sub OnRowEditing(sender As Object, e As GridViewEditEventArgs)
    GridView1.EditIndex = e.NewEditIndex
    Me.BindGrid()
End Sub
 
Protected Sub OnRowCancelingEdit(sender As Object, e As GridViewCancelEditEventArgs)
    GridView1.EditIndex = -1
    Me.BindGrid()
End Sub
 
Protected Sub OnRowUpdating(sender As Object, e As GridViewUpdateEventArgs)
    Dim txtQuantity As TextBox = TryCast(GridView1.Rows(e.RowIndex).FindControl("txtQuantity"), TextBox)
    Dim dt As DataTable = TryCast(ViewState("dt"), DataTable)
    dt.Rows(e.RowIndex)("Quantity") = If(Not String.IsNullOrEmpty(txtQuantity.Text), txtQuantity.Text, "0")
    ViewState("dt") = dt
    GridView1.EditIndex = -1
    Me.BindGrid()
End Sub
 
 
Demo
 
Downloads