我想创建一个自动完成的文本框使用jQuery将被绑定到SQL数据库。我还希望在页面上放置一个下拉列表,以便根据初始选择自动完成文本框从不同的表中检索数据。这是一个ASP.NET 2.0页面,后面的代码是VB.NET。我有AJAX自动完成工作,但它只匹配第一个字符,它不像jQuery那样健壮。任何人都可以共享一个示例代码,它将从SQL中检索搜索数据,并为我提供有关如何使表名称变为动态的说明?自动完成jQuery和SQL,ASP.NET
任何帮助是极大的赞赏
沃尔玛
我想创建一个自动完成的文本框使用jQuery将被绑定到SQL数据库。我还希望在页面上放置一个下拉列表,以便根据初始选择自动完成文本框从不同的表中检索数据。这是一个ASP.NET 2.0页面,后面的代码是VB.NET。我有AJAX自动完成工作,但它只匹配第一个字符,它不像jQuery那样健壮。任何人都可以共享一个示例代码,它将从SQL中检索搜索数据,并为我提供有关如何使表名称变为动态的说明?自动完成jQuery和SQL,ASP.NET
任何帮助是极大的赞赏
沃尔玛
你可以写一个处理程序(ashx的),从数据库返回的查询结果为您的文本搜索和表名。对于表名,请看SQL Server中的INFORMATION_SCHEMA.TABLES ...
看看这个 .NET AJAX Calls to ASMX or ASPX or ASHX?对于使用ScriptService的稍微更现代的方法 - 基本思想是一样的。
如果需要的话(它的v.late)我会后的代码明天,
H个。
编辑:
在最简单的(你会明白参与做一些更复杂的,当您去的问题),让我们来想象你有三个表:用户,部和产品。
表:用户
ID INT
用名字VARCHAR(50)
姓VARCHAR(50)
DATEOFBIRTH日期时间
表:系
ID INT
名称VARCHAR
表:产品
ID INT
名称VARCHAR
而且你需要3个存储过程由名称的一部分选择:
存储过程的产品和部门的形式是一样的:
CREATE PROCEDURE dbo.ProductSelect (dbo.DepartmentSelect)
@qry VARCHAR(50)
AS
BEGIN
SET NOCOUNT ON;
SELECT *
FROM dbo.Product (dbo.Department)
WHERE [Name] LIKE '%' + @qry + '%'
END
,为用户略有不同:
CREATE PROCEDURE [dbo].[UserSelect]
@qryTerm VARCHAR(50)
AS
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;
SELECT U.Id, U.Forename + ' ' + U.Surname AS [Name], U.DateOfBirth
FROM
dbo.[User] U
WHERE
(
forename LIKE '%' + @qryTerm + '%'
OR
surname LIKE '%' + @qryTerm + '%'
)
ORDER BY
surname, Forename
END
基本页/控制标记:
<div>
Tables:
<asp:DropDownList runat="server" ID="ddlTables" />
</div>
<div>
<asp:TextBox runat="server" ID="txtUser" />
</div>
....
到下拉列表绑定到你需要的线沿线的一个存储过程/查询表的列表:
SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = 'dbo' ORDER BY TABLE_NAME
[更改模式名称到的您的架构]
//Bind your dropdown to the list of tables
using (SqlConnection conn = new SqlConnection(ConfigurationManager.AppSettings["dbConnString"]))
{
using (SqlCommand cmnd = conn.CreateCommand())
{
cmnd.CommandType = CommandType.StoredProcedure;
cmnd.CommandText = "dbo.TableSelect";
conn.Open();
System.Text.StringBuilder sb = new System.Text.StringBuilder();
using (SqlDataReader rdr = cmnd.ExecuteReader(CommandBehavior.CloseConnection))
{
string _fullName;
while (rdr.Read())
{
_fullName = string.Format("{0}.{1}",rdr["Table_Schema"].ToString(), rdr["Table_Name"].ToString());
ddlTables.Items.Add(new ListItem(_fullName,_fullName));
}
ddlTables.Items.Insert(0, new ListItem("Select Table ..."));
}
}
}
然后,你需要你的文本框线了以响应该keyup
EV JavaScript函数ent:
//Wire up the textbox
txtUser.Attributes.Add("onkeyup", "doLookup();");
function doLookup(){
}
现在这样做的方法是使用JQuery的AJaX功能。基本上,您可以调用处理程序的URL,它将返回查询结果,然后将结果绑定或输出到您的文本框中的下的GUI元素,所以它看起来有点像下拉列表。用户然后单击其中一个返回的条目将其复制到文本框中。
一些处理代码:
public void ProcessRequest(HttpContext context)
{
HttpRequest req = context.Request;
if (string.IsNullOrEmpty(req.QueryString["qry"]) || string.IsNullOrEmpty(req.QueryString["tableName"])){
return;// You could return something meaningful if no sql query is passed
}
String sqlstr = req.QueryString["qry"];
String tableName = req.QueryString["tableName"];
System.Text.StringBuilder sb = new System.Text.StringBuilder();
using (SqlConnection conn = new SqlConnection(ConfigurationManager.AppSettings["dbConnStr"])){
using (SqlCommand cmnd = conn.CreateCommand())
{
cmnd.CommandText = tableName + "Select";
cmnd.CommandType = CommandType.StoredProcedure;
SqlParameter pram = new SqlParameter("@qry", sqlstr);
pram.Direction = ParameterDirection.Input;
cmnd.Parameters.Add(pram);
pram = new SqlParameter("@tableName", tableName);
pram.Direction = ParameterDirection.Input;
cmnd.Parameters.Add(pram);
conn.Open();
using (SqlDataReader rdr = cmnd.ExecuteReader(CommandBehavior.CloseConnection)){
while (rdr.Read()){
sb.Append(rdr["Name"].ToString() + "<br/>"); //Modern object-oriented thing to do is build up a JSON string and return that.
}
}
}
}
context.Response.ContentType = "text/plain";//or "text/JSON"
context.Response.Write(sb.ToString());
}
好运。让我知道如果你需要任何更多的细节......
试试这个家伙,可以帮助你:http://1code.codeplex.com/
谢谢你,肯定会是有益的,如果你可以将它张贴明天 – Martyn 2011-02-23 00:18:23
辉煌,非常感谢,我会给它一个 – Martyn 2011-02-23 22:39:05
没问题,希望这是你之后的事情。 – 5arx 2011-02-23 23:05:48