如果有源码 请发我邮箱[email protected]
解决方案 »
- 问个gridview的问题,支个招吧谢谢
- GridView 的 ButtonField 单击事件
- 关于meta标签的语法
- 提示 AutoMation服务器不能创建对象 怎么解决问题?
- 如何向一个FTP站点上传指定的文件?
- 使用正则表达式老不能识别的转义序列
- 在.NET 3.5中 动态创建 Panel 时,如果同时让这个 Panel 加入左右菜单功能?
- 异常详细信息: System.FormatException: 输入字符串的格式不正确。求帮忙
- 真的没人能解决这个问题吗? 问了N次,回复0次. 真绝望哪! 有一个2列的Datagrid, 我想click某行即进入编辑状态, 有高手指点说每一列都做成L
- iis7 网站根目录被注入txt文件请问该怎么解决?
- 有关在指定时间清空静态变量值的问题
- URLRewriter中,能不能把参数以“aa.html?city=参数"的形式显示出来,为什么我怎么设定都找不到页呢?
AutoCompleteExtender控件!!
公司要求不用webservers ???????
为什么 ???????????????????/
用webservers 数据库内容写里面不是一样
public ArrayList GetSearhItmes(string str)
{
ArrayList itmes = new ArrayList(); OABase.Base.DBObject _dbo = new OABase.Base.DBObject();
_dbo.SqlComm = string.Format("select Alias from tblEmployee where charindex('{0}',lower(Alias)) = 1", str); // string.Format(string format,object arg0); 把 arg0 替换到 fomat 中的指定位置‘{0}’,
// charindex(string1,string2) 查找 string1 在 string2 中第一次出现的位置
// lower(string) 将 string 转换成小写字符
DataTable dt = _dbo.GetDataTable(); foreach( DataRow dr in dt.Rows)
{
itmes.Add(dr[0]);
}
return itmes;
}
=========page===============<script language="javascript" src="lookup.js" type="text/javascript"></script><script language="jscript" type="text/javascript">
mainLoop = function()
{
val = escape(queryField.value);
if (lastVal != val)
{
var response = Ajax_UserReg_UserTip.GetSearhItmes(val);
showQueryDiv(response.value);
lastVal = val;
}
setTimeout('mainLoop()', 100);
return true;
}
</script>
<hr />
<asp:Label ID="Label2" runat="server">请输入姓名:</asp:Label>
<input name="search" type="text" id="search" autocomplete="off" /><script language="javascript" type="text/javascript">window.oninit=InitQueryCode("search","querydiv");</script>=========lookup.js=================// JScript File// 下拉区背景色
var DIV_BG_COLOR = "#EEE";// 高亮显示条目颜色
var DIV_HIGHLIGHT_COLOR = "#C30";// 字体
var DIV_FONT = "Arial";// 下拉区内补丁大小
var DIV_PADDING = "2px";// 下拉区边框样式
var DIV_BORDER = "1px solid #CCC"; // 文本输入框
var queryField;// 下拉区ID
var divName;// IFrame名称
var ifName;// 记录上次选择的值
var lastVal = "";// 当前选择的值
var val = "";// 显示结果的下拉区
var globalDiv;// 下拉区是否设置格式的标记
var divFormatted = false;/**
InitQueryCode函数必须在<body onload>事件的响应函数中调用,其中:
queryFieldName为文本框控件的ID,
hiddenDivName为显示下拉区div的ID
*/
function InitQueryCode(queryFieldName, hiddenDivName)
{
// 指定文本输入框的onblur和onkeydown响应函数
queryField = document.getElementById(queryFieldName);
queryField.onblur = hideDiv;
queryField.onkeydown = keypressHandler; // 设置queryField的autocomplete属性为"off"
queryField.autocomplete = "off"; // 如果没有指定hiddenDivName,取默认值"querydiv"
if (hiddenDivName)
{
divName = hiddenDivName;
}
else
{
divName = "querydiv";
} // IFrame的name
ifName = "queryiframe"; // 100ms后调用mainLoop函数
setTimeout("mainLoop()", 100);
}
获取下拉区的div,如果没有则创建之
*/
function getDiv (divID)
{
if (!globalDiv)
{
// 如果div在页面中不存在,创建一个新的div
if (!document.getElementById(divID))
{
var newNode = document.createElement("div");
newNode.setAttribute("id", divID);
document.body.appendChild(newNode);
} // globalDiv设置为div的引用
globalDiv = document.getElementById(divID);
// 计算div左上角的位置
var x = queryField.offsetLeft;
var y = queryField.offsetTop + queryField.offsetHeight;
var parent = queryField;
while (parent.offsetParent)
{
parent = parent.offsetParent;
x += parent.offsetLeft;
y += parent.offsetTop;
} // 如果没有对div设置格式,则为其设置相应的显示样式
if (!divFormatted)
{
globalDiv.style.backgroundColor = DIV_BG_COLOR;
//globalDiv.style.fontFamily = DIV_FONT;
globalDiv.style.padding = DIV_PADDING;
globalDiv.style.border = DIV_BORDER;
globalDiv.style.width = "100px";
globalDiv.style.fontSize = "10px"; globalDiv.style.position = "absolute";
globalDiv.style.left = x + "px";
globalDiv.style.top = y + "px";
globalDiv.style.visibility = "hidden";
globalDiv.style.zIndex = 10000; divFormatted = true;
}
} return globalDiv;
}/**
根据返回的结果集显示下拉区
*/
function showQueryDiv(resultArray)
{
// 获取div的引用
var div = getDiv(divName);
// 如果div中有内容,则删除之
while (div.childNodes.length > 0)
div.removeChild(div.childNodes[0]); // 依次添加结果
for (var i = 0; i < resultArray.length; i++)
{
// 每一个结果也是一个div
var result = document.createElement("div");
// 设置结果div的显示样式
result.style.cursor = "pointer";
result.style.padding = "2px 0px 2px 0px";
// 设置为未选中
_unhighlightResult(result);
// 设置鼠标移进、移出等事件响应函数
result.onmousedown = selectResult;
result.onmouseover = highlightResult;
result.onmouseout = unhighlightResult;
// 结果的文本是一个span
var result1 = document.createElement("span");
// 设置文本span的显示样式
result1.className = "result1";
result1.style.textAlign = "left";
result1.style.fontWeight = "bold";
result1.innerHTML = resultArray[i];
// 将span添加为结果div的子节点
result.appendChild(result1);
// 将结果div添加为下拉区的子节点
div.appendChild(result);
} // 如果结果集不为空,则显示,否则不显示
showDiv(resultArray.length > 0);}/**
用户单击某个结果时,将文本框的内容替换为结果的文本,
并隐藏下拉区
*/
function selectResult()
{
_selectResult(this);
}// 选择一个条目
function _selectResult(item)
{
var spans = item.getElementsByTagName("span");
if (spans)
{
for (var i = 0; i < spans.length; i++)
{
if (spans[i].className == "result1")
{
queryField.value = spans[i].innerHTML;
lastVal = val = escape(queryField.value);
mainLoop();
queryField.focus();
showDiv(false);
return;
}
}
}
}/**
当鼠标移到某个条目之上时,高亮显示该条目
*/
function highlightResult()
{
_highlightResult(this);
}function _highlightResult(item)
{
item.style.backgroundColor = DIV_HIGHLIGHT_COLOR;
}/**
当鼠标移出某个条目时,正常显示该条目
*/
function unhighlightResult()
{
_unhighlightResult(this);
}function _unhighlightResult(item)
{
item.style.backgroundColor = DIV_BG_COLOR;
}/**
显示/不显示下拉区
*/
function showDiv (show)
{
var div = getDiv(divName);
if (show)
{
div.style.visibility = "visible";
}
else
{
div.style.visibility = "hidden";
}
adjustiFrame();
}/**
隐藏下拉区
*/
function hideDiv ()
{
showDiv(false);
}/**
调整IFrame的位置,这是为了解决div可能会显示在输入框后面的问题
*/
function adjustiFrame()
{
// 如果没有IFrame,则创建
if (!document.getElementById(ifName))
{
var newNode = document.createElement("iFrame");
newNode.setAttribute("id", ifName);
newNode.setAttribute("src", "javascript:false;");
newNode.setAttribute("scrolling", "no");
newNode.setAttribute("frameborder", "0");
document.body.appendChild(newNode);
} iFrameDiv = document.getElementById(ifName);
var div = getDiv(divName); // 调整IFrame的位置与div重合,并在div的下一层
try
{
iFrameDiv.style.position = "absolute";
iFrameDiv.style.width = div.offsetWidth;
iFrameDiv.style.height = div.offsetHeight;
iFrameDiv.style.top = div.style.top;
iFrameDiv.style.left = div.style.left;
iFrameDiv.style.zIndex = div.style.zIndex - 1;
iFrameDiv.style.visibility = div.style.visibility;
}
catch (e)
{
}
}/**
文本输入框的onkeydown响应函数
*/
function keypressHandler (evt)
{
// 获取对下拉区的引用
var div = getDiv(divName); // 如果下拉区不显示,则什么也不做
if (div.style.visibility == "hidden")
{
return true;
} // 确保evt是一个有效的事件
if (!evt && window.event)
{
evt = window.event;
}
var key = evt.keyCode; var KEYUP = 38;
var KEYDOWN = 40;
var KEYENTER = 13;
var KEYTAB = 9;
// 只处理上下键、回车键和Tab键的响应
if ((key != KEYUP) && (key != KEYDOWN) && (key != KEYENTER) && (key != KEYTAB))
{
return true;
} var selNum = getSelectedSpanNum(div);
var selSpan = setSelectedSpan(div, selNum);
// 如果键入回车和Tab,则选择当前选择条目
if ((key == KEYENTER) || (key == KEYTAB))
{
if (selSpan)
{
_selectResult(selSpan);
}
evt.cancelBubble = true;
return false;
}
else //如果键入上下键,则上下移动选中条目
{
if (key == KEYUP)
{
selSpan = setSelectedSpan(div, selNum - 1);
}
if (key == KEYDOWN)
{
selSpan = setSelectedSpan(div, selNum + 1);
}
if (selSpan)
{
_highlightResult(selSpan);
}
} // 显示下拉区
showDiv(true);
return true;
}/**
获取当前选中的条目的序号
*/
function getSelectedSpanNum(div)
{
var count = -1;
var spans = div.getElementsByTagName("div");
if (spans)
{
for (var i = 0; i < spans.length; i++)
{
count++;
if (spans[i].style.backgroundColor != div.style.backgroundColor)
{
return count;
}
}
} return -1;
}/**
选择指定序号的结果条目
*/
function setSelectedSpan(div, spanNum)
{
var count = -1;
var thisSpan;
var spans = div.getElementsByTagName("div");
if (spans)
{
for (var i = 0; i < spans.length; i++)
{
if (++count == spanNum)
{
_highlightResult(spans[i]);
thisSpan = spans[i];
}
else
{
_unhighlightResult(spans[i]);
}
}
}
return thisSpan;
}
public ArrayList GetSearhItmes(string str) 这个函数肯定是要调用的把,参数怎么写呢,难道是SQL语句的字符串?还有调用的时候肯定是pagaLoad里面的把,所以参数方面望指教,另外 这个OABase.Base.DBObject 要引用什么命名空间。。
本人新手希望指出...2.关于JS方面,InitQueryCode(queryFieldName, hiddenDivName) 这个function说是在body里面调用,但是参数方面怎么写,因为有个getdiv()这个函数,就是说我不用指定div的ID,但是InitQueryCode()这个里面的div的参数我该怎么处理呢
是不是在body结尾前的<script language="javascript" type="text/javascript" >window.oninit=InitQueryCode("search","querydiv"); </script >
控制body onload3.也是关于JS方面的,就是鼠标和键盘事件我该如何调用,由于没有用过,望指出。
写在最后,如果有源码可以调式通过的话(请一定要支持中文自动提示!),请放出,感激不尽!
<asp:ScriptManager ID="ScriptManager1" runat="server" >
</asp:ScriptManager >
<ajaxToolkit:AutoCompleteExtender ID="AutoCompleteExtender1" runat="server"
TargetControlID="TextBox1"
CompletionSetCount="12"
EnableCaching="true"
MinimumPrefixLength="1"
ServicePath="sql_test.asmx"
CompletionListElementID="Panel1"
ServiceMethod="GetCompleteList" >
</ajaxToolkit:AutoCompleteExtender >
</div >
<asp:TextBox ID="TextBox1" runat="server" ForeColor="Black" > </asp:TextBox > sql_test.asmx的代码 using System;
using System.Web.Services;
using System.Collections.Generic;
using System.Data.SqlClient;
[WebService(Namespace = "http://tempuri.org/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
[System.Web.Script.Services.ScriptService]
public class sql_test : System.Web.Services.WebService { public sql_test () { //如果使用设计的组件,请取消注释以下行
//InitializeComponent();
} [WebMethod]
public string[] GetCompleteList(string prefixText, int count)
{
List <string > items = new List <string >(count);//泛型
SqlConnection myCon = new SqlConnection("Server=AAAA;uid=sa;pwd=TTiger;Database=kmjxc_08_test");//数据库连接
myCon.Open();//打开数据库连接
SqlCommand myCmd = new SqlCommand("select top " + count + " username from user_item where username like '" + prefixText + "% 'group by username order by username ", myCon);
SqlDataReader myDR = myCmd.ExecuteReader();
while (myDR.Read())
{
items.Add(myDR["username"].ToString());
}
myCon.Close();//关闭数据库连接
return items.ToArray();
}
}
完整的代码 ........一个都没漏............
原因是不支持中文
{
ArrayList itmes = new ArrayList(); OABase.Base.DBObject _dbo = new OABase.Base.DBObject();
_dbo.SqlComm = string.Format("select Alias from tblEmployee where charindex( '{0} ',lower(Alias)) = 1", str); // string.Format(string format,object arg0); 把 arg0 替换到 fomat 中的指定位置‘{0}’,
// charindex(string1,string2) 查找 string1 在 string2 中第一次出现的位置
// lower(string) 将 string 转换成小写字符
DataTable dt = _dbo.GetDataTable(); foreach( DataRow dr in dt.Rows)
{
itmes.Add(dr[0]);
}
return itmes;
}
这是一个ajax方法
参数str就是当前输入框的内容OABase.Base.DBObject _dbo = new OABase.Base.DBObject();
_dbo.SqlComm = string.Format("select Alias from tblEmployee where charindex( '{0} ',lower(Alias)) = 1", str);
这一段是将数据库中匹配的内容提取出来放在一个dt中 这里当然要换成泥自己的代码
InitQueryCode参数就两个 search是那个input的id, querydiv是lookup.js中默认的一个div的idlookup.js中的内容不需要任何修改
http://topic.csdn.net/u/20071016/13/a10ef5df-3ee7-4f35-8366-c6f1eeb414a2.html既然楼主说不可以用这种方法,我也学习一下JS的写法
请详细说下。。不会要去网站上面下把
不过
你要看你WEB服务器 反映的速度了
没有流畅感
这个还是不做的好
我认为
EricGuzuqiang
的例子应该够用了吧
用ATLAS也很容易实现
最应该注意的的是客户的角度
_dbo.SqlComm = string.Format("select Alias from tblEmployee where charindex( '{0} ',lower(Alias)) = 1", str); // string.Format(string format,object arg0); 把 arg0 替换到 fomat 中的指定位置‘{0}’,
// charindex(string1,string2) 查找 string1 在 string2 中第一次出现的位置
// lower(string) 将 string 转换成小写字符
DataTable dt = _dbo.GetDataTable(); 这段代码的意思就是 从数据库中选出跟当前input框中内容相匹配的所有记录,然后将这个纪录存在dt里面这里你需要改成自己的方法
<body>
<form id="form1" runat="server">
<div>
<asp:Label ID="Label2" runat="server" >请输入姓名: </asp:Label >
<input name="search" type="text" id="search" autocomplete="off" / >
<script language="javascript" type="text/javascript" >window.oninit=InitQueryCode("search","querydiv"); </script >
</div>
</form>
</body>但是调试时候居然会报脚本错误,说是无效字符,行322我看了一下lookup.js的322是 // 如果键入回车和Tab,则选择当前选择条目
if ((key == KEYENTER) ¦ ¦ (key == KEYTAB))
{
if (selSpan)
{
_selectResult(selSpan);
}
evt.cancelBubble = true;
return false;
}
<head runat="server">
<title>无标题页</title>
<script language="javascript" src="lookup.js" type="text/javascript" > </script >
<script language="jscript" type="text/javascript" >
mainLoop = function()
{
val = escape(queryField.value);
if (lastVal != val)
{
var response = Ajax_UserReg_UserTip.GetSearhItmes(val);
showQueryDiv(response.value);
lastVal = val;
}
setTimeout( 'mainLoop() ', 100);
return true;
}
</script >
</head><body>
<form id="form1" runat="server">
<div>
<asp:Label ID="Label2" runat="server" >请输入姓名: </asp:Label >
<input name="search" type="text" id="search" autocomplete="off" / >
</div>
<script language="javascript" type="text/javascript">window.oninit=InitQueryCode("search","querydiv");</script>
</form>
</body>
</html>
看了一下 绝对没问题啊
public ArrayList GetSearhItmes(string str)
{
ArrayList itmes = new ArrayList(); SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["conStr"].ToString());
conn.Open();
SqlDataAdapter da = new SqlDataAdapter("select P_ProvinceName from Province where P_ProvinceName like'" + str + "%'order by P_ProvinceName", conn);
DataSet ds = new DataSet();
da.Fill(ds); //OABase.Base.DBObject _dbo = new OABase.Base.DBObject();
//_dbo.SqlComm = string.Format("select P_ProvinceName from Province where charindex( '{0} ',lower(P_ProvinceName)) = 1", str); //// string.Format(string format,object arg0); 把 arg0 替换到 fomat 中的指定位置‘{0}’,
//// charindex(string1,string2) 查找 string1 在 string2 中第一次出现的位置
//// lower(string) 将 string 转换成小写字符
//DataTable dt = _dbo.GetDataTable(); foreach (DataRow dr in ds.Tables[0].Rows)
{
itmes.Add(dr[0]);
}
return itmes;
}
这是我CS中写的方法,修改过请也看看~~
我想是var response = Ajax_UserReg_UserTip.GetSearhItmes(val);
这句代码的问题"Ajax_UserReg_UserTip"是控件的类名
建议你先在网上查查ajax.dll的用法
web service咋跟js的关系,就好象“关公战秦琼”,没有关系。