0

我有一个列表框。每当我从数据库中搜索一个人时,结果都会显示在列表框中。然后我想要的是每当我从列表框中单击人员的姓名时,人员详细信息将显示在文本框中。我有我的代码,但问题是只有我第一次点击的人的详细信息才会显示在文本框中。

private void listBox1_SelectedIndexChanged(object sender, EventArgs e)
    {
        connection.Open();
        OleDbCommand select = new OleDbCommand();
        select.Connection = connection;
        select.CommandText = "Select * From Accounts";
        OleDbDataReader reader = select.ExecuteReader();

        while (reader.Read())
        {
            if (reader[0].ToString() == listBox1.Tag.ToString())
            {
                fnametb.Text = reader[1].ToString();
                lnametb.Text = reader[2].ToString();
                agetb.Text = reader[3].ToString();
                addresstb.Text = reader[4].ToString();
                coursetb.Text = reader[5].ToString();
            }

        }
        connection.Close();

    }
4

5 回答 5

0

查看

if (reader[0].ToString() == listBox1.Tag.ToString())
it will not work....

您需要获取列表框的选定索引

于 2013-03-01T07:17:23.473 回答
0

将其更改为listBox1.selectedItem.ToString()

于 2013-03-01T07:18:13.780 回答
0

如果你想使用你的代码,你需要刷新listBox1.Tag并放入TagSelected 列表框项键。或者你需要使用类似的东西reader[0].ToString() ==listBox1.SelectedValue

于 2013-03-01T07:18:20.090 回答
0

您正在检查ListBox.Tag而不是ListBox.SelectedItem.

Tag 属性可用于存储要与项目关联的任何对象。尽管您可以存储任何项目,但 Tag 属性通常用于存储有关项目的字符串信息,例如唯一标识符或项目数据在数据库中的索引位置。

无论如何SelectedItem,您都可以简单地检查一下。listBox1_SelectedIndexChanged

代替

if (reader[0].ToString() == listBox1.Tag.ToString())

尝试

if (reader[0].ToString() == listBox1.SelectedItem.ToString())
于 2013-03-01T07:23:21.067 回答
-1

您的 Select Query 必须具有一些参数,例如 WHERE 子句,以便程序知道它将加载数据库中的哪些特定数据。

告诉我你的列表框中的显示是什么?

这只是另一种选择。

于 2013-03-01T07:22:46.133 回答