使用ajax自动完成文本框而不使用Web服务
Hello Everyone ..
我正在尝试使用gridview中的ajax AutoCompleteExtender自动完成文本框...但不幸的是它不适合我。我尝试了很多次,却无法找到原因导致它不能正常工作....
我尝试过的事情:
<%@ Page Title =Language =C#MasterPageFile =〜/ Administrator / MasterStyle / Site1.MasterAutoEventWireup =trueCodeBehind =CustomerBilling.aspx .csInherits =MarketingPlan.Administrator.CustomerBilling%>
<%@ MasterType VirtualPath =〜/ Administrator / MasterStyle / Site1.Master%>
<%@ Register Assembly =AjaxControlToolkitNamespace =AjaxControlToolkitTagPrefix =cc1%>
< asp:Content ID =Content1ContentPlaceHolderID =headrunat = server>
< asp:Content ID =Content2ContentPlaceHolderID =ContentPlaceHolder1runat =server>
<% - 使用母版页中的脚本管理器 - %>>
<% - < asp:ScriptManager ID =ScriptManager2runat =server
EnablePageMethods =true>
- %>
< asp:gridview ID =Gridview1runat =serverShowFooter =trueAutoGenerateColumns =falseAllowPaging =trueWidth =90%CssClass =dataTables_wrapper>
< columns> < asp:BoundField DataField =RowNumberHeaderText =行号ItemStyle-CssClass =center/>
< asp:TemplateField HeaderText =PRODUCT NAME>
< itemtemplate>
< asp:TextBox ID =txtProductNamerunat =server>
< cc1:AutoCompleteExtender ServiceMethod =SearchCustomersMinimumPrefixLength =2CompletionInterval =100EnableCaching =falseCompletionSetCount =10
TargetControlID =txtProductNameID =AutoCompleteExtender1runat = serverFirstRowSelected =false>
< asp:TemplateField HeaderText =MRP>
< itemtemplate>
< asp:TextBox ID =txtMRP runat =server>
< asp:TemplateField HeaderText =PP>
< itemtemplate>
< asp:TextBox ID =txtPPrunat =server>
< asp:TemplateField HeaderText =DP>
< itemtemplate>
< asp:TextBox ID =txtDPrunat =服务器>
< asp:TemplateField HeaderText =QUANTITY>
< itemtemplate>
< asp:TextBox ID =txtQuantityrunat =server>
< asp:TemplateField HeaderText =TOTAL>
< itemtemplate>
< asp:TextBox ID =txtToatalrunat =server>
< footerstyle horizontalalign =Center>
< footertemplate>
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:按钮ID =ButtonAddrunat =serverText =Add ItemOnClick =ButtonAdd_Click/> < asp:Button ID =btnBillGeneraterunat =serverText =Save Bill />
<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();
使用(SqlCommand cmd = new SqlCommand())
{
cmd.CommandText =从Product_Mst中选择ProductName+
ProductName like @ProductName +'%';
cmd.Parameters.AddWithValue(@ ProductName,prefixText);
List< string> product = new List< string>();
using(SqlDataReader sdr = cmd.ExecuteReader())
{
while(sdr。阅读())
{
product.Add(sdr [ProductName]。ToString());
}
}
退货;
}
}
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) (字符串)));
dt.Columns.Add(新的DataC olumn(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);
//将数据表存储在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 ++)
{
//提取TextBox值
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 ++;
}
//向DataTable添加新行
dtCurrentTable.Rows.Add(drCurrentRow) ;
//将当前数据存储到ViewState
ViewState [CurrentTable] = dtCurrentTable;
//使用当前数据重新绑定网格
Gridview1.DataSou rce = dtCurrentTable;
Gridview1.DataBind();
}
}
else
{
Response.Write(ViewState为null);
}
//在回发上设置先前数据
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.Row s [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();
}
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();
}
您好
您在autocoplete扩展程序中定义的服务方法是'searchcustomers'和您的实际服务方式是'SerachProducts'。
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">
[System.Web.Script.Services.ScriptMethod()]
[System.Web.Services.WebMethod]
public static List SerachProducts(string prefixText, int count)
Thanx for解决方案@priyadarshini
Thanx for solution @priyadarshini