使用ajax自动完成文本框而不使用Web服务 [英] Autocomplete textbox using ajax without web services

查看:54
本文介绍了使用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>

- %>





< b r />
< 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 horizo​​ntalalign =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


这篇关于使用ajax自动完成文本框而不使用Web服务的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆