2013-05-16 28 views
0

这是我的代码我FormLoad -event自动完成文本框有两个选项,在C#中的winform搜索

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. 通过数

但是它不工作。我已经在我的TextChanged-事件中试过了,但没有运气。有人能帮助我吗?

回答

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