功能简介:最近在做个凭证单子,里面的一些编辑框是需要联想功能的。
功能实现:在AJAX功能的吸引下,我GOOGLE到了MS开发的ASP.NET 2.0 AJAX Extensions 1.0是基于.NET FRAMEWORK 2.0开发的,正合我意,下面利用AutoCompleteExtender控件来实现我需要的功能
部分主要代码如下:
HTML界面代码
功能实现:在AJAX功能的吸引下,我GOOGLE到了MS开发的ASP.NET 2.0 AJAX Extensions 1.0是基于.NET FRAMEWORK 2.0开发的,正合我意,下面利用AutoCompleteExtender控件来实现我需要的功能
部分主要代码如下:
HTML界面代码
<cc1:ToolkitScriptManager ID="ToolkitScriptManager1" runat="server">
</cc1:ToolkitScriptManager>
<div>
<asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
<cc1:AutoCompleteExtender ID="AutoCompleteExtender1" MinimumPrefixLength="1"
CompletionInterval="300"
EnableCaching="true"
CompletionSetCount="10"
BehaviorID="AutoCompleteEx" runat="server" ServiceMethod="GetCompletionList"
UseContextKey="True" TargetControlID="TextBox1">
<Animations>
<OnShow>
<Sequence>
<OpacityAction Opacity="0" />
<HideAction Visible="true" />
<ScriptAction Script="
// Cache the size and setup the initial size
var behavior = $find('AutoCompleteEx');
if (!behavior._height) {
var target = behavior.get_completionList();
behavior._height = target.offsetHeight - 2;
target.style.height = '0px';
}" />
<Parallel Duration=".1">
<FadeIn />
<Length PropertyKey="height" StartValue="0" EndValueScript="$find('AutoCompleteEx')._height" />
</Parallel>
</Sequence>
</OnShow>
<OnHide>
<Parallel Duration=".1">
<FadeOut />
<Length PropertyKey="height" StartValueScript="$find('AutoCompleteEx')._height" EndValue="0" />
</Parallel>
</OnHide></Animations>
</cc1:AutoCompleteExtender>
<script type="text/javascript">
// Work around browser behavior of "auto-submitting" simple forms
var frm = document.getElementById("aspnetForm");
if (frm) {
frm.onsubmit = function() { return false; };
}
</script>
<input type="submit" style="display:none;" />
</div>
</cc1:ToolkitScriptManager>
<div>
<asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
<cc1:AutoCompleteExtender ID="AutoCompleteExtender1" MinimumPrefixLength="1"
CompletionInterval="300"
EnableCaching="true"
CompletionSetCount="10"
BehaviorID="AutoCompleteEx" runat="server" ServiceMethod="GetCompletionList"
UseContextKey="True" TargetControlID="TextBox1">
<Animations>
<OnShow>
<Sequence>
<OpacityAction Opacity="0" />
<HideAction Visible="true" />
<ScriptAction Script="
// Cache the size and setup the initial size
var behavior = $find('AutoCompleteEx');
if (!behavior._height) {
var target = behavior.get_completionList();
behavior._height = target.offsetHeight - 2;
target.style.height = '0px';
}" />
<Parallel Duration=".1">
<FadeIn />
<Length PropertyKey="height" StartValue="0" EndValueScript="$find('AutoCompleteEx')._height" />
</Parallel>
</Sequence>
</OnShow>
<OnHide>
<Parallel Duration=".1">
<FadeOut />
<Length PropertyKey="height" StartValueScript="$find('AutoCompleteEx')._height" EndValue="0" />
</Parallel>
</OnHide></Animations>
</cc1:AutoCompleteExtender>
<script type="text/javascript">
// Work around browser behavior of "auto-submitting" simple forms
var frm = document.getElementById("aspnetForm");
if (frm) {
frm.onsubmit = function() { return false; };
}
</script>
<input type="submit" style="display:none;" />
</div>
验证代码(CS)如下:
public string[] GetAutoComplete(string prefixText, int count)
{
string xm = "";
string fixxm = "";
if (count == 0)
{
count = 10;
}
{
return new string[0];
}
ClassLibrary.SzsDataTableAdapters.szsTableAdapter sta = new ClassLibrary.SzsDataTableAdapters.szsTableAdapter();
sd = sta.GetData();
int rCount = 0;
for (int i = 0; i < sd.Rows.Count; i++)
{
xm = sd.Rows[i]["姓名"].ToString();
if (xm.Length > prefixText.Length)
{
fixxm = xm.Remove(prefixText.Length, xm.Length - prefixText.Length);
if (fixxm == prefixText)
{
items.Add(sd.Rows[i]["姓名"].ToString());
rCount++;
if (rCount >= 10)
{
break;
}
}
}
}
return items.ToArray();
}
{
string xm = "";
string fixxm = "";
if (count == 0)
{
count = 10;
}
if (prefixText.Equals("我"))
{
return new string[0];
}
List
<string> items = new List<string>(count);ClassLibrary.SzsData.szsDataTable sd
= new ClassLibrary.SzsData.szsDataTable();ClassLibrary.SzsDataTableAdapters.szsTableAdapter sta = new ClassLibrary.SzsDataTableAdapters.szsTableAdapter();
sd = sta.GetData();
int rCount = 0;
for (int i = 0; i < sd.Rows.Count; i++)
{
xm = sd.Rows[i]["姓名"].ToString();
if (xm.Length > prefixText.Length)
{
fixxm = xm.Remove(prefixText.Length, xm.Length - prefixText.Length);
if (fixxm == prefixText)
{
items.Add(sd.Rows[i]["姓名"].ToString());
rCount++;
if (rCount >= 10)
{
break;
}
}
}
}
return items.ToArray();
}
控件存在的BUG:如果需要返回数字类型的,结果会在编辑框下显示UNDEFINE,也许是JAVASCRIPT中的单引出现的问题,所以例如下面的方法:
public string[] GetStringLength(string prefixText)
{
string[] items = new string[10];
items[0] = prefixText.Length.ToString();
return items;
}
{
string[] items = new string[10];
items[0] = prefixText.Length.ToString();
return items;
}
则需修改为以下:
public string[] GetStringLength(string prefixText)
{
string[] items = new string[10];
items[0] = "'"+prefixText.Length.ToString()+"'";
return items;
}
{
string[] items = new string[10];
items[0] = "'"+prefixText.Length.ToString()+"'";
return items;
}
希望下次MS在发布该组控件同时能解决此BUG。