自动填充文本框,有两个选项可在c#winform中搜索

时间:2013-05-16 08:32:34

标签: c# winforms autocomplete textbox

这是我FormLoad - 事件

上的代码
SqlDataReader dReader;
SqlConnection conn = new SqlConnection(MyClass.GlobalConn());
conn.Open();
SqlCommand cmd = new SqlCommand();
cmd.Connection = conn;
cmd.CommandType = CommandType.Text;

if (radioName.checked==true)
{           
    cmd.CommandText = "select RTRIM(Person_name) from MyTable order by Person_name";
}
else
{
    cmd.CommandText = "select RTRIM(Person_number) from MyTable order by Person_number";
}

dReader = cmd.ExecuteReader();

if (dReader.HasRows == true)
{
    while (dReader.Read())
        namesCollection.Add(dReader[0].ToString());
}
else
{
    MessageBox.Show("Data not found");
}

dReader.Close();

tPT.AutoCompleteMode = AutoCompleteMode.Suggest;
tPT.AutoCompleteSource = AutoCompleteSource.CustomSource;
tPT.AutoCompleteCustomSource = namesCollection;
conn.Close();  

我希望在文本框中输入时填充自动填充文本框有两个选项:

  1. 按名称
  2. 按号码
  3. 然而它不起作用。我已经在TextChanged - 事件中尝试了这个,但没有运气。有人可以帮帮我吗?

1 个答案:

答案 0 :(得分:0)

而不是使用可选的AutoCompleteSource将所有数据更新到一个源中。这不会有任何问题,因为这个人不必选择选项,而是通过决定他的选择来打字。

SqlDataReader dReader;
SqlConnection conn = new SqlConnection(MyClass.GlobalConn());
conn.Open();
SqlCommand cmd = new SqlCommand();
cmd.Connection = conn;
cmd.CommandType = CommandType.Text; 
cmd.CommandText = "select RTRIM(Person_name) from MyTable order by Person_name";
dReader = cmd.ExecuteReader();
cmd.CommandText = "select RTRIM(Person_number) from MyTable order by Person_number";
dReader = cmd.ExecuteReader();
if (dReader.HasRows == true)
{
    while (dReader.Read())
        namesCollection.Add(dReader[0].ToString());
}
else
{
    MessageBox.Show("Data not found");
}

dReader.Close();

tPT.AutoCompleteMode = AutoCompleteMode.Suggest;
tPT.AutoCompleteSource = AutoCompleteSource.CustomSource;
tPT.AutoCompleteCustomSource = namesCollection;
conn.Close();

或者如果您想使用旧选项,

namesCollection.RemoveAll();
SqlDataReader dReader;
SqlConnection conn = new SqlConnection(MyClass.GlobalConn());
conn.Open();
SqlCommand cmd = new SqlCommand();
cmd.Connection = conn;
cmd.CommandType = CommandType.Text; 
namesCollection.RemoveAll();
if (radioName.checked==true)
{
    cmd.CommandText = "select RTRIM(Person_name) from MyTable order by Person_name";
}
else
{
    cmd.CommandText = "select RTRIM(Person_number) from MyTable order by Person_number";
}
dReader = cmd.ExecuteReader();

if (dReader.HasRows == true)
{
    while (dReader.Read())
        namesCollection.Add(dReader[0].ToString());
}
else
{
    MessageBox.Show("Data not found");
}

dReader.Close();

tPT.AutoCompleteMode = AutoCompleteMode.Suggest;
tPT.AutoCompleteSource = AutoCompleteSource.CustomSource;
tPT.AutoCompleteCustomSource = namesCollection;
conn.Close();

注意

  

namesCollection.RemoveAll();