从一个自动完成c#中填充多个文本框

时间:2013-12-26 18:00:19

标签: c# autocomplete

我想不出一个干净的解决方案,也无法为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;
    }
}

提前感谢,节日快乐! 干杯

1 个答案:

答案 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;
    }

代码应该代表它的自我,已经有一段时间了。