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();
}