动态创建多个TextBox,用户在TextBox 输入文字,TextBox下智能提示与输入有关的列表(通过数据库动态查询出),点击项放入Textbox,类似Web的AutoComplete(或者百度的搜索智能提示). |
|
10分 |
这个我在CodeProject看过一个大牛做的类似的东西,还是有些难度,你上CodeProject 搜索 Intellisense popup, 找那篇文章看看。
|
10分 |
通过数据库动态查这东西很不靠谱,效率太低了,每输入一个字符就要卡半天
你还是把数据库里的东西先读到内存里,然后再匹配吧 |
10分 |
没看懂你这个动态的是怎么个动态法,输入过一次的内容自动保存下来以便下次再次输入?把它更新回数据源里同时insert到数据库或文件
|
就是说 AutoCompleteStringCollection? 是动态的数据(根据用户输入内容服务器获取不同AutoCompleteStringCollection? ),不是固定的。
|
|
winform,如果数据不是太大,就在本地搞个数据缓存
|
|
10分 |
ComboBox有个AutoCompleteCustomSource,AutoCompleteMode,AutoCompleteSource
设置好数据源。 设置一下DropDownStyle=DropDown 即能自动补充,又能保留下拉列表的功能 |
另外补充一句,你搜索的表 最好加上索引、
|
|
10分 |
此为正解。 |
这个是静态的提示数据,我知道怎么实现啊。现在是想知道动态的提示数据怎么实现。 |
|
是的就是这个意思 |
|
其实”透明”这个词是有歧义的
我们经常说机关单位管理上要”透明” 按照计算机语言里”透明”的概念,他们已经是透明的了,完全感觉不到他们有管理过什么 |
|
补18楼:就是dongtai获取数据之后怎么在客户端呈现出来,让用户可以点击选择自动填入TextBox。
|
|
先不考虑如何去加载的问题 |
|
你的那些代码不是写在TextChanged事件处理程序里的。
那些绑定在TextBox动态生成的时候写一遍就可以了。 至于你说“我要输入个1,你就去表1里取数据,我输入个2,你去表2里取数据”的问题,我建议你一开始绑定的就是表一和表二的数据集的和,因为这个动态补充本来就是取前面一样的补充 |
|
10分 |
我要输入个1,你就去表1里取数据,我输入个2,你去表2里取数据
假定 表1中 有11、12、21、22 表2中有13、14、23、24 那你在绑定TextBox的AutoCompleteCustomSource的时候,绑定表1、表2的数据集和,把不符合要求的如表1中的21、22,表2中13、14数据都筛除,绑定所有符合要求的数据,只绑定一次 TextBox的TextChanged事件不要了。 |
我在想怎么动态绑定这个AutoComplete,就是怎么检索先不管,那么这个AutoCompleteCustomSource 我可以在客户端改变么? |
|
现在是按照你说的实现的,form 加载的时候一次绑定好AutoCompleteCustomSource。后面不变。 |
|
10分 |
我想是可以修改的,http://bbs.csdn.net/topics/390324804里面的例子,先Clear一下,再绑定。只是不能在TextChanged事件里面改,也就是修改的时候TextBox里面的内容不能改变,否则就冲突了。 |
是冲突,因为在TextChanged 的时候系统默认是要智能提示的,所以这个时候 AutoCompleteCustomSource 是要锁定的。 |
|
20分 |
你这样又回到最初的问题了
你如何判断什么时候绑定这个,什么时候又绑定那个? 还是直接绑定所有列表的并集最简单了 |
[/i]
fieldset>
现在是这么搞的。 |
|
10分 |
这些功能都是跟不上时代的。
winform这么些年真正升级过吗?你应该使用wpf。 fieldset>
是冲突,因为在TextChanged 的时候系统默认是要智能提示的,所以这个时候 AutoCompleteCustomSource 是要锁定的。 |
这些年我们见过的 autocomplete 功能,都习惯于:
1. 它可以索引大量数据。 2. 输入几个字符只后才开始提示。 3. 每次提示20个就够了,不用全都给列出来。 4. 可以实时访问远程数据库而产生(20条)提示内容。而不是在初始化时取来所有可能的提示内容。 |
|
1、2、3好说,都是要求。 |
|
智能提示问题的实现
//TextBox文本框提示不能为空 <asp:TextBox ID=”txtName” runat=”server” BackColor=”White” Height=”20px” MaxLength=”8″ Rows=”1″ Width=”150px” AutoPostBack=”True” onFocus=”tName();” OnTextChanged=”txtName_TextChanged”></asp:TextBox> <asp:RequiredFieldValidator ID=”rfvName” runat=”server” ControlToValidate=”txtName” Display=”Dynamic” ErrorMessage=”用户名不能为空” Font-Size=”9pt” ForeColor=”#0000CC”></asp:RequiredFieldValidator> //js提示输入格式问题 function tName() { document.getElementById(“sp1″).innerHTML=”只能输入数字、字母下划线,<br>例如:mr_2023″; }//codego.net/tags/11/1/ //密码输入设置 <asp:TextBox ID=”txtPass” runat=”server” BackColor=”White” Height=”20px” MaxLength=”8″ Rows=”1″ Width=”150px” onchange=”passHint()” onFocus=”tPass();” TextMode=”Password”></asp:TextBox> //密码不能为空设置 <asp:RequiredFieldValidator ID=”txtPwd” runat=”server” ControlToValidate=”txtPass” Display=”Dynamic” ErrorMessage=”密码不能为空” Font-Size=”9pt” ForeColor=”#0000CC”></asp:RequiredFieldValidator> //js提示密码强弱设置 function passHint() { var txt=document.getElementById(“txtPass”).value; if(txt.length<6) { document.getElementById(“labEbb”).innerHTML=”密码强度:弱”; }else { document.getElementById(“labEbb”).innerHTML=”密码强度:强”; } if(txt.length==0) { document.getElementById(“labEbb”).innerHTML=””; document.getElementById(“labEbb”).innerHTML=””; } } //强弱提示显示 <asp:Label ID=”labEbb” runat=”server” Font-Size=”12px” ForeColor=”Blue” Height=”16px” Width=”77px”></asp:Label><span id=”sp2″ style=”font-size: 12px; color: Blue”></span> //js提示输入位数 function tPass() { document.getElementById(“sp1″).innerHTML=”密码应在6位以上。”; } /div> |