如何根据第一个TextBox使用DataBase中的相​​应数据自动填充第二个TextBox

时间:2015-02-06 14:23:32

标签: c# database winforms autocomplete relationship

在我的winform中,有2 column, 1st one is studentname & 2nd column is StudentAverage的数据表 首先txtbx是autosuggest(studentname)。 如何使第二个txtbx根据第一个txtbx自动填充(第二个txtbx填充相应的第二列记录(studentsavrage)?

这是第一个txtbx;显示学生姓名

private void txtbxName_TextChanged(object sender, EventArgs e)
    {

            AutoCompleteStringCollection namesCollection = new AutoCompleteStringCollection();
            string StrCmd = "SELECT * FROM School";
            string ConnStr = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=|DataDirectory|\School_Database.accdb";
            OleDbConnection MyConn = new OleDbConnection(ConnStr);
            MyConn.Open();
            OleDbCommand Cmd = new OleDbCommand(StrCmd, MyConn); ;
            OleDbDataReader ObjReader = Cmd.ExecuteReader();
            if (ObjReader != null)
        {
            while (ObjReader.Read())
                namesCollection.Add(ObjReader["StudentName"].ToString());
        }
        else
        {
            MessageBox.Show("Data not found");
        }
            ObjReader.Close();
            MyConn.Close();
            txtbxName.AutoCompleteMode = AutoCompleteMode.Suggest;
            txtbxName.AutoCompleteSource = AutoCompleteSource.CustomSource;
            txtbxName.AutoCompleteCustomSource = namesCollection;         
    }

1 个答案:

答案 0 :(得分:0)

我假设您正在使用WinForms进行开发。

首先输出:由于查询中缺少where子句,因此在用户输入文本时不会进行过滤。如果你不想要,你应该在另一个地方移动AutoCompleteStrinCollection。

您的问题:此处更简单的方法是手动更新txtbxName_TextChanged方法中的第二个文本框。

private void txtbxName_TextChanged(object sender, EventArgs e)
{
     string StrCmd = String.Format( "SELECT AGE FROM School WHERE name '{0', txtbox1.Text");
     //perform query as you already do and read result
     textbox2.Text = cmd.ExecuteScalar()
}
P.S:在现实世界中,事情并没有像你在许多方面所做的那样完成