我想不出一个干净的解决方案,也无法为c#找到这样的东西。
我想要做的是从一个TextBox做一个带有用户数据(名称,姓氏等)的自动完成,这是有效的。 我输入名字的第一个字母,自动填充功能会显示正确的名称。
现在,在我在第一个TextBox中选择了正确的用户之后,我想自动填充其他用户。 像Zip-code,Street,Adres等。
这就是我自动填充atm的方式:
class getUsers
{
Database db = new Database();
public AutoCompleteStringCollection userAutoComplete()
{
AutoCompleteStringCollection acsc = new AutoCompleteStringCollection();
try
{
db.cmd.Connection = db.connection;
db.connection.Open();
db.cmd.CommandText = "SELECT * FROM user";
OleDbDataReader reader = db.cmd.ExecuteReader();
while (reader.Read())
{
acsc.Add(reader["name"].ToString() + " " + reader["lastname"].ToString() + " " + reader["zipcode"].ToString() + " - " + reader["street"].ToString());
}
reader.Close();
db.connection.Close();
}
catch (Exception ex) { MessageBox.Show(ex.Message); }
return acsc;
}
}
这是表单加载:
public partial class users : Form
{
getUsers gK = new getUsers();
private void users_Load(object sender, EventArgs e)
{
textBox1.AutoCompleteSource = AutoCompleteSource.CustomSource;
textBox1.AutoCompleteCustomSource = gK.userAutoComplete();
textBox1.AutoCompleteMode = AutoCompleteMode.SuggestAppend;
}
}
提前感谢,节日快乐! 干杯
答案 0 :(得分:0)
另外,只是为了回答其他人的问题,我认为这种方式足够干净:
当我遍历我的自动完成时,在其中添加客户的名称和信息。 我还将它添加到List中,然后我可以在我的autoFill中读取它。
public List<getKlanten> _listklantnr = new List<getKlanten>();
AutoCompleteStringCollection acsc = new AutoCompleteStringCollection();
public AutoCompleteStringCollection klantAutoComplete()
{
try
{
db.cmd.Connection = db.connection;
db.connection.Open();
db.cmd.CommandText = "SELECT * FROM klant";
OleDbDataReader reader = db.cmd.ExecuteReader();
while (reader.Read())
{
_listklantnr.Add(new getKlanten
{
klantnr = (int)reader["klantnr"],
});
if (reader["tussenvoegsel"].ToString().ToUpper() != "")
{
acsc.Add(reader["roepnaam"].ToString().ToUpper() + " " + reader["tussenvoegsel"].ToString().ToUpper() + " " + reader["achternaam"].ToString().ToUpper() + " - " + reader["postcode"].ToString().ToUpper() + " " + reader["huisnummer"].ToString().ToUpper());
} else {
acsc.Add(reader["roepnaam"].ToString().ToUpper() + " " + reader["achternaam"].ToString().ToUpper() + " - " + reader["postcode"].ToString().ToUpper() + " " + reader["huisnummer"].ToString().ToUpper());
}
}
reader.Close();
db.connection.Close();
}
catch (Exception ex) { MessageBox.Show(ex.Message); }
return acsc;
}
所以使用IndexOf和东西我可以完全得到我想要的客户,然后如果主文本框触发onTextChanged,则在每个其他TextBox上使用String autoFill方法。 :)
string result;
public string autoFill(string Tabel, string naamTxtbox)
{
try
{
result = "";
int getIndexKlanten;
getIndexKlanten = (acsc.IndexOf(naamtxtbox));// < 0) ? -1 : acsc.IndexOf(naamtxtbox);
if (getIndexKlanten > -1)
{
db.cmd.Connection = db.connection;
db.connection.Open();
db.cmd.CommandText = "SELECT * " +
"FROM klant " +
"WHERE klantnr = ?";
db.cmd.Parameters.Add(new OleDbParameter("1", _listklantnr[getIndexKlanten].klantnr.ToString()));
OleDbDataReader dataReader;
dataReader = db.cmd.ExecuteReader(CommandBehavior.CloseConnection);
while (dataReader.Read())
{
klantresult = dataReader[tabel].ToString();
}
dataReader.Close();
db.cmd.Parameters.Clear();
db.connection.Close();
}
}
catch (Exception ex) { MessageBox.Show(ex.Message); }
return klantresult;
}
代码应该代表它的自我,已经有一段时间了。