Click here to Skip to main content
15,921,841 members
Please Sign up or sign in to vote.
1.00/5 (1 vote)
See more:
Hello Everyone..
I am trying auto-complete textbox using ajax AutoCompleteExtender in gridview...But unfortunately its not working for me. I tried it many times but unable to find reason why its not working....

What I have tried:

<%@ Page Title="" Language="C#" MasterPageFile="~/Administrator/MasterStyle/Site1.Master" AutoEventWireup="true" CodeBehind="CustomerBilling.aspx.cs" Inherits="MarketingPlan.Administrator.CustomerBilling" %>
<%@ MasterType VirtualPath="~/Administrator/MasterStyle/Site1.Master"%>
<%@ Register Assembly="AjaxControlToolkit" Namespace="AjaxControlToolkit" TagPrefix="cc1" %>
<asp:Content ID="Content1" ContentPlaceHolderID="head" runat="server">

<asp:Content ID="Content2" ContentPlaceHolderID="ContentPlaceHolder1" runat="server">
<%-- using script manager in master page-- %>>
<%--<asp:ScriptManager ID="ScriptManager2" runat="server"
EnablePageMethods = "true">
--%>



<asp:gridview ID="Gridview1" runat="server" ShowFooter="true" AutoGenerateColumns="false" AllowPaging="true" Width="90%" CssClass="dataTables_wrapper" >
<columns> <asp:BoundField DataField="RowNumber" HeaderText="Row Number" ItemStyle-CssClass="center"/>
<asp:TemplateField HeaderText="PRODUCT NAME">
<itemtemplate>
<asp:TextBox ID="txtProductName" runat="server">

<cc1:AutoCompleteExtender ServiceMethod="SearchCustomers" MinimumPrefixLength="2" CompletionInterval="100" EnableCaching="false" CompletionSetCount="10"
TargetControlID="txtProductName" ID="AutoCompleteExtender1" runat="server" FirstRowSelected = "false">





<asp:TemplateField HeaderText="MRP">
<itemtemplate>
<asp:TextBox ID="txtMRP" runat="server">


<asp:TemplateField HeaderText="PP">
<itemtemplate>
<asp:TextBox ID="txtPP" runat="server">


<asp:TemplateField HeaderText="DP">
<itemtemplate>
<asp:TextBox ID="txtDP" runat="server">


<asp:TemplateField HeaderText="QUANTITY">
<itemtemplate>
<asp:TextBox ID="txtQuantity" runat="server">


<asp:TemplateField HeaderText="TOTAL">
<itemtemplate>
<asp:TextBox ID="txtToatal" runat="server">

<footerstyle horizontalalign="Center">
<footertemplate>






<asp:Button ID="ButtonAdd" runat="server" Text="Add Item" OnClick="ButtonAdd_Click"/>   <asp:Button ID="btnBillGenerate" runat="server" Text="Save Bill" />








protected void Page_Load(object sender, EventArgs e)
{
if (!Page.IsPostBack)
{
SetInitialRow();

}
}


[System.Web.Script.Services.ScriptMethod()]
[System.Web.Services.WebMethod]
public static List<string> SerachProducts(string prefixText, int count)
{
MarketingPlanDB.DbHelper db = new MarketingPlanDB.DbHelper();
using (SqlCommand cmd = new SqlCommand())
{
cmd.CommandText = "select ProductName from Product_Mst where " +
"ProductName like @ProductName + '%'";
cmd.Parameters.AddWithValue("@ProductName", prefixText);


List<string> product = new List<string>();
using (SqlDataReader sdr = cmd.ExecuteReader())
{
while (sdr.Read())
{
product.Add(sdr["ProductName"].ToString());
}
}

return product;
}

}





private void SetInitialRow()
{

DataTable dt = new DataTable();
DataRow dr = null;
dt.Columns.Add(new DataColumn("RowNumber", typeof(string)));
dt.Columns.Add(new DataColumn("PRODUCT NAME", typeof(string)));
dt.Columns.Add(new DataColumn("MRP", typeof(string)));
dt.Columns.Add(new DataColumn("PP", typeof(string)));
dt.Columns.Add(new DataColumn("DP", typeof(string)));
dt.Columns.Add(new DataColumn("QUANTITY", typeof(string)));
dt.Columns.Add(new DataColumn("TOTAL", typeof(string)));
dr = dt.NewRow();
dr["RowNumber"] = 1;
dr["PRODUCT NAME"] = string.Empty;
dr["MRP"] = string.Empty;
dr["PP"] = string.Empty;
dr["DP"] = string.Empty;
dr["QUANTITY"] = string.Empty;
dr["TOTAL"] = string.Empty;
dt.Rows.Add(dr);

//Store the DataTable in ViewState
ViewState["CurrentTable"] = dt;

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

private void AddNewRowToGrid()
{

int rowIndex = 0;
if (ViewState["CurrentTable"] != null)
{
DataTable dtCurrentTable = (DataTable)ViewState["CurrentTable"];
DataRow drCurrentRow = null;
if (dtCurrentTable.Rows.Count > 0)
{
for (int i = 1; i <= dtCurrentTable.Rows.Count; i++)
{
//extract the TextBox values
TextBox box1 = (TextBox)Gridview1.Rows[rowIndex].Cells[1].FindControl("txtProductName");
TextBox box2 = (TextBox)Gridview1.Rows[rowIndex].Cells[2].FindControl("txtMRP");
TextBox box3 = (TextBox)Gridview1.Rows[rowIndex].Cells[3].FindControl("txtPP");
TextBox box4 = (TextBox)Gridview1.Rows[rowIndex].Cells[3].FindControl("txtDP");
TextBox box5 = (TextBox)Gridview1.Rows[rowIndex].Cells[3].FindControl("txtQuantity");
TextBox box6 = (TextBox)Gridview1.Rows[rowIndex].Cells[3].FindControl("txtToatal");
drCurrentRow = dtCurrentTable.NewRow();
drCurrentRow["RowNumber"] = i + 1;
drCurrentRow["PRODUCT NAME"] = box1.Text;
drCurrentRow["MRP"] = box2.Text;
drCurrentRow["PP"] = box3.Text;
drCurrentRow["DP"] = box4.Text;
drCurrentRow["QUANTITY"] = box5.Text;
drCurrentRow["TOTAL"] = box6.Text;

rowIndex++;
}

//add new row to DataTable
dtCurrentTable.Rows.Add(drCurrentRow);
//Store the current data to ViewState
ViewState["CurrentTable"] = dtCurrentTable;

//Rebind the Grid with the current data
Gridview1.DataSource = dtCurrentTable;
Gridview1.DataBind();
}
}
else
{
Response.Write("ViewState is null");
}

//Set Previous Data on Postbacks
SetPreviousData();
}


private void SetPreviousData()
{

int rowIndex = 0;
if (ViewState["CurrentTable"] != null)
{
DataTable dt = (DataTable)ViewState["CurrentTable"];
if (dt.Rows.Count > 0)
{
for (int i = 1; i < dt.Rows.Count; i++)
{
TextBox box1 = (TextBox)Gridview1.Rows[rowIndex].Cells[1].FindControl("txtProductName");
TextBox box2 = (TextBox)Gridview1.Rows[rowIndex].Cells[2].FindControl("txtMRP");
TextBox box3 = (TextBox)Gridview1.Rows[rowIndex].Cells[3].FindControl("txtPP");
TextBox box4 = (TextBox)Gridview1.Rows[rowIndex].Cells[3].FindControl("txtDP");
TextBox box5 = (TextBox)Gridview1.Rows[rowIndex].Cells[3].FindControl("txtQuantity");
TextBox box6 = (TextBox)Gridview1.Rows[rowIndex].Cells[3].FindControl("txtToatal");

box1.Text = dt.Rows[i]["PRODUCT NAME"].ToString();
box2.Text = dt.Rows[i]["MRP"].ToString();
box3.Text = dt.Rows[i]["PP"].ToString();
box4.Text = dt.Rows[i]["DP"].ToString();
box5.Text = dt.Rows[i]["QUANTITY"].ToString();
box6.Text = dt.Rows[i]["TOTAL"].ToString();

rowIndex++;

}
}
}
}


protected void ButtonAdd_Click(object sender, EventArgs e)
{
AddNewRowToGrid();
}
Posted
Updated 27-Apr-16 21:32pm

Hi

The service method u defined in you autocoplete extender is 'searchcustomers' and your actual service method is'SerachProducts'.




<cc1:AutoCompleteExtender ServiceMethod="SearchCustomers" MinimumPrefixLength="2" CompletionInterval="100" EnableCaching="false" CompletionSetCount="10"
TargetControlID="txtProductName" ID="AutoCompleteExtender1" runat="server" FirstRowSelected = "false">


C#
[System.Web.Script.Services.ScriptMethod()]
[System.Web.Services.WebMethod]
public static List SerachProducts(string prefixText, int count)
 
Share this answer
 
Thanx for solution @priyadarshini
 
Share this answer
 

This content, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)



CodeProject, 20 Bay Street, 11th Floor Toronto, Ontario, Canada M5J 2N8 +1 (416) 849-8900