日期:2014-05-17  浏览次数:21297 次

c#中的下拉框如何能实现拼音匹配(C/S)
具体要求就是在绑定数据库的下拉列表框,文本框中实现拼音输入匹配下拉和输入模糊检索下拉,就是输入拼音后进行首字母(或者全拼音)匹配,输入相关内容后进行模糊检索后下拉。以前没有接触过这类的问题,请教具体实现应该调用哪些类和方法?能在原先控件的基础上修改么?请各位大牛给个思路,指点下小弟。万分感谢,分数不多先来100请包涵。


------解决方案--------------------
mark
------解决方案--------------------
和网页的类似了

------解决方案--------------------
可以在原先控件的基础上修改。
绑定的数据库加一个拼音的字段,如绑定数据库中地址address字段,则再加一个addresspy字段,例:
address addresspy
北京 bj
上海 sh
河北 hb
河南 hn
这样下拉列表框中输入h字符时,在数据库中查询条件为addresspy like 'h%',就会筛选出河北 河南2条记录了。你只要改变了绑定的数据集的内容,下拉的内容也就对应变了。
------解决方案--------------------
恩,问百度...
------解决方案--------------------
挺复杂不是一句两句可以说的清。继续控件。查询。排序。两边传值。
------解决方案--------------------
探讨

绑定的数据库加一个拼音的字段,如绑定数据库中地址address字段,则再加一个addresspy字段,例:
address addresspy
北京 bj
上海 sh
河北 hb
河南 hn
这样下拉列表框中输入h字符时,在数据库中查询条件为addresspy like 'h%',就会筛选出河北 河南2条记录了。你只要改变了绑定的数据集的内容,下拉的内容……

------解决方案--------------------
using System;
using System.Collections.Generic;
using System.Text;
using System.Windows.Forms;
using System.Data.SqlClient;

namespace NewApp
{
class AutoComplete
{
List<TextBox> _CompleteObjectList = new List<TextBox>();
Dictionary<string, AutoCompleteStringCollection> _Source = new Dictionary<string, AutoCompleteStringCollection>();
SqlConnection conn = new SqlConnection("Data Source=.;Initial Catalog=TestDB;Integrated Security=True");
public AutoComplete()
{
conn.Open();
SqlCommand cmd = new SqlCommand("select * from AutoComplete", conn);
SqlDataReader read = cmd.ExecuteReader();
while (read.Read())
{
string key = read["name"].ToString();
if (!_Source.ContainsKey(key))
_Source.Add(key, new AutoCompleteStringCollection());
_Source[key].Add(read["str"].ToString());
}
read.Close();
conn.Close();
}

public void AddAll(Control item)
{
for (int i = 0; i < item.Controls.Count; i++)
{
Control var = item.Controls[i];
if (var.GetType().Equals(typeof(TextBox)))
{
Add(var as TextBox);
}
}
}

public void Add(TextBox text)
{
_CompleteObjectList.Add(text);
text.Leave += new EventHandler(text_Leave);
text.AutoCompleteMode = AutoCompleteMode.SuggestAppend;
text.AutoCompleteSource = AutoCompleteSource.CustomSource;
if (!_Source.ContainsKey(text.Name))
{
_Source.Add(text.Name, new AutoCompleteStringCollection());
}
text.AutoCompleteCustomSource = _Source[text.Name];
}

public void Delete(TextBox text)
{
_CompleteObjectList.Remove(text);
}

public void DeleteAll(Control item)
{
for (int i = 0; i < item.Controls.Count; i++)
{
Control var = item.Controls[i];
if (var.GetType().Equals(typeof(TextBox)))
{
Delete(var as TextBox);