我想創建一個自動完成的文本框使用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