首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

c#中的上拉框怎么能实现拼音匹配(C/S)

2012-11-20 
c#中的下拉框如何能实现拼音匹配(C/S)具体要求就是在绑定数据库的下拉列表框,文本框中实现拼音输入匹配下

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);


}
}
}

public void AutoCompleteClear()
{
foreach (AutoCompleteStringCollection var in _Source.Values)
{
var.Clear();
}
SqlCommand cmd = new SqlCommand("Delete AutoComplete", conn);
conn.Open();
cmd.ExecuteNonQuery();
conn.Close();
}

void text_Leave(object sender, EventArgs e)
{
TextBox text = sender as TextBox;
if (text.Text == "")
return;
string key = text.Name;
if (!_Source.ContainsKey(key))
{
_Source.Add(key, new AutoCompleteStringCollection());
}
if (!_Source[key].Contains(text.Text))
{
SqlCommand cmd = new SqlCommand("insert into AutoComplete select '" + key.Replace("'", "''") + "', '" + text.Text.Replace("'", "''") + "'", conn);
conn.Open();
cmd.ExecuteNonQuery();
_Source[key].Add(text.Text);
conn.Close();
}
}
}
}


[解决办法]
参考
[解决办法]

探讨

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

[解决办法]
有一第三方库可以取得汉字的拼音及首字母,这样就好办了吧?
[解决办法]
关注~~
[解决办法]
思路可以这样:
1、对于输入汉字的来讲,就只有模糊匹配的问题,这个好办,以绑定到DataGridView下的某一列下拉列表为例,可以这样:
C# code
        /// <summary>        /// 实现数据列的智能匹配        /// </summary>        /// <param name="sender"></param>        /// <param name="e"></param>        private void dataGridView1_EditingControlShowing(object sender, DataGridViewEditingControlShowingEventArgs e)        {            if (e.Control is DataGridViewTextBoxEditingControl)            {                DataGridViewTextBoxEditingControl te =                (DataGridViewTextBoxEditingControl)e.Control;                te.Name = "items";                te.AutoCompleteMode = AutoCompleteMode.Suggest;                te.AutoCompleteSource = AutoCompleteSource.CustomSource;                SqlConnection conn1 = new SqlConnection("Data Source=.;Initial Catalog=jwinfo;Integrated Security=True;");                conn1.Open();                string comand2 = @"select 姓名 from 学生信息";                SqlDataAdapter adatter2 = new SqlDataAdapter(comand2, conn1);                DataSet dataset2 = new DataSet();                adatter2.Fill(dataset2, "学生信息");                string[] itemsg = new string[dataset2.Tables["学生信息"].Rows.Count];                int col = dataGridView1.CurrentCell.ColumnIndex;                switch (col)                {                    case 0:                        break;                    case 1:                        for (int i = 0; i < dataset2.Tables["学生信息"].Rows.Count; i++)                        {                            itemsg[i] = dataset2.Tables["学生信息"].Rows[i][0].ToString();                            te.AutoCompleteCustomSource.AddRange(new string[] { itemsg[i] });                        }                        te.AutoCompleteMode = AutoCompleteMode.SuggestAppend;                        break;                    case 3:                        break;                    case 4:                        break;                    case 5:                        break;                    default:                        break;                }            }        } 


[解决办法]
我是自己做的自定义控件来操作的。。。将一个 TextBox 和一个 DataGridView组合在一起实现的。
[解决办法]
不在数据库中加拼音字段,那在SQL查询时动态转换汉字为拼音多麻烦,而且耗时。
即使把要查询的记录先全部放到内存dataset,然后再对dataset进行查询处理,也要耗很大的内存,除非记录数很少。如果记录数少可以这样处理,可以用上面13楼的函数动态转换拼音并筛选。

热点排行