PDA

View Full Version : TextBox با قابلیت AutoComplete مانند Google



Developer Programmer
دوشنبه 21 تیر 1389, 19:27 عصر
من AjaxToolkit رو دنلود کردم. و بعد از گذاشتن ScriptManager یک کنترل AutoCompleteTextBox روی فرم میذارم.


<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
<title>Untitled Page</title>
</head>
<body>
<form id="form1" runat="server">
<div>

</div>
<asp:ScriptManager ID="ScriptManager1" runat="server" />
<div>
<asp:TextBox ID="TextBox1" runat="server" Width="785px"></asp:TextBox>

<asp:AutoCompleteExtender
ID="AutoCompleteExtender1"
runat="server" MinimumPrefixLength="1"
ServiceMethod="GetProducts"
ServicePath="WebService.asmx"
TargetControlID="TextBox1">
</asp:AutoCompleteExtender>
</div>
</form>
</body>
</html>


بعد داخل فایل webservice.asmx این کد رو اضافه کردم

using System;
using System.Configuration;
using System.Data;
using System.Data.SqlClient;
using System.Web;
using System.Collections;
using System.Web.Services;
using System.Web.Services.Protocols;
using System.Web.Script.Services;

namespace WebApplication1
{

[ScriptService]
[WebService(Namespace = "http://tempuri.org/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
public class WebService : System.Web.Services.WebService
{
[WebMethod]
public string[] GetProducts(string prefixText)
{
string sql = "Select * from products Where name like @prefixText";
SqlDataAdapter da = new SqlDataAdapter(sql, ConfigurationSettings.AppSettings["ConnectionString"]);
da.SelectCommand.Parameters.Add("@prefixText", SqlDbType.VarChar, 50).Value = prefixText + "%";
DataTable dt = new DataTable();
da.Fill(dt);
string[] items = new string[dt.Rows.Count];
int i = 0;
foreach (DataRow dr in dt.Rows)
{
items.SetValue(dr["name"].ToString(), i);
i++;
}
return items;
}
}
}


منتها با تایپ در داخل TextBox هیچ اتفاقی نمیافته !!

مشکل از کجاست ؟

Alireza_Salehi
دوشنبه 21 تیر 1389, 20:56 عصر
باید داخل Script Manager وب سرویس رو معرفی کنید.

Developer Programmer
دوشنبه 21 تیر 1389, 21:32 عصر
لطفا کاملتر توضیح بدید

Alireza_Salehi
دوشنبه 21 تیر 1389, 23:24 عصر
برای وب سرویس شما با فرض این که در ریشه وب سایت قرار گرفته باشد:
<asp:ScriptManager ID="tsm" runat="server" ScriptMode="Release">
<Services>
<asp:ServiceReference Path="~/webservice.asmx" />
</Services>
</asp:ScriptManager>

Developer Programmer
جمعه 08 مرداد 1389, 22:36 عصر
علی رضا جان. من کد رو اینطور اصلاح کردم:

<%@ Page Language="C#‎‎‎" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="WebApplication1._Default" %>
<%@ Register assembly="AjaxControlToolkit" namespace="AjaxControlToolkit" tagprefix="asp" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
<title></title>
</head>
<body>
<form id="form1" runat="server">
<div>
<asp:ToolkitScriptManager ID="ToolkitScriptManager1" runat="server"> </asp:ToolkitScriptManager>

<asp:TextBox ID="txtMovie" runat="server"></asp:TextBox>

<asp:AutoCompleteExtender
ID="AutoCompleteExtender1"
runat="server"
TargetControlID=txtmovie
ServicePath="AutoComplete.asmx"
ServiceMethod="GetProducts"
MinimumPrefixLength="1"
EnableCaching="true">
</asp:AutoCompleteExtender>
</div>

</form>
</body>
</html>

و

using System.Collections;
using System.Web.Services;
using System.Web.Services.Protocols;
using System.Data;
using System.Data.SqlClient;
using System.Configuration;

namespace WebApplication1
{
/// <summary>
/// Summary description for AutoComplete
/// </summary>
[WebService(Namespace = "http://tempuri.org/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
[System.ComponentModel.ToolboxItem(false)]
// To allow this Web Service to be called from script, using ASP.NET AJAX, uncomment the following line.
// [System.Web.Script.Services.ScriptService]
public class AutoComplete : System.Web.Services.WebService
{

[System.Web.Services.WebMethod]
[System.Web.Script.Services.ScriptMethod]
public string[] GetProducts(string prefixText)
{
SqlConnection cnn = new SqlConnection(@"Data Source=AFSHIN-PC;Initial Catalog=Northwind;Persist Security Info=True;User ID=sa;Password=123");
string sql = "Select * from products Where ProductName Like @prefixText";
SqlDataAdapter da = new SqlDataAdapter(sql, cnn);

da.SelectCommand.Parameters.Add("@prefixText", SqlDbType.VarChar, 50).Value = prefixText + "%";
DataTable dt = new DataTable();
da.Fill(dt);
string[] items = new string[dt.Rows.Count];
int i = 0;
foreach (DataRow dr in dt.Rows)
{
items.SetValue(dr["ProductName"].ToString(), i);
i++;
}
return items;
}
}
}



اما بازهم با تایپ مقادیر، اتفاقی نمی افته ... محبت کن و یه نگاهی بهش بنداز.

Alireza_Salehi
شنبه 09 مرداد 1389, 09:35 صبح
باید در این قسمت همون طور که در پست 4 گفتم وب سرویس رو تعریف کنی:
<asp:ToolkitScriptManager ID="ToolkitScriptManager1" runat="server"> </asp:ToolkitScriptManager>

Developer Programmer
شنبه 09 مرداد 1389, 16:28 عصر
:ناراحت:
یعنی اینطور دیگه ؟

<asp:ToolkitScriptManager ID="ToolkitScriptManager1" runat="server">
<Services>
<asp:ServiceReference Path="~/AutoComplete.asmx" />
</Services>
</asp:ToolkitScriptManager>

<asp:TextBox ID="txtMovie" runat="server"></asp:TextBox>

<asp:AutoCompleteExtender
ID="AutoCompleteExtender1"
runat="server"
TargetControlID="txtmovie"
ServicePath="~/AutoComplete.asmx"
ServiceMethod="GetProducts"
MinimumPrefixLength="2"
EnableCaching="false">
</asp:AutoCompleteExtender>

بازهم با تایپ مقدار هیچ اتفاقی نمیافته