在Windows窗体中更改ListBox选择时更新多个数据

时间:2016-06-16 04:00:42

标签: c# winforms datatable listbox

我是数据库和Windows窗体的新手,并且无法找到解决方案。我有一个带有ListBox的Windows窗体应用程序。 ListBox包含当前数据库中的所有条目。当我选择一个条目时,我想显示该选择的所有列。例如,如果我有一个表"人"条目,每个条目都有列年龄,体重,身高等数据,我想更改表格上的标签以对应选择的统计数据。

(我已经看到这是由数据绑定完成的,但这只适用于一个显示成员。)

基本上:

private void currentItems_SelectedIndexChanged(object sender, EventArgs e)
{
    // something like:
    // label1.Text = selectedId.ColumnValue1;
    // label2.Text = selectedId.ColumnValue2;
    // ...
}

作为一个子问题,我只会为这个应用程序处理一个小型数据库。有没有办法只需要调用一次Select语句,将所有数据放入DataTable,然后从中抽取?我想不断从数据库调用会很慢。

1 个答案:

答案 0 :(得分:1)

感受数据绑定的力量!

将此代码放在表单构造函数中。

public Form1()
{
    //InitializeComponent();

    var dataTable = new DataTable();

    // Assume that DataTable is populated from database.
    dataTable.Columns.Add("Name", typeof(string));
    dataTable.Columns.Add("Age", typeof(int));

    dataTable.Rows.Add("John", 42);
    dataTable.Rows.Add("Smit", 33);


    var dataGridView = new DataGridView { Parent = this, Dock = DockStyle.Top };
    dataGridView.DataSource = dataTable;

    var listBoxNames = new ListBox { Parent = this, Top = dataGridView.Bottom + 10 };
    listBoxNames.DataSource = dataTable;
    listBoxNames.DisplayMember = "Name";

    var labelName = new Label { Parent = this, Top = listBoxNames.Top, Left = listBoxNames.Right + 20 };
    labelName.DataBindings.Add("Text", dataTable, "Name");

    var textBoxName = new TextBox { Parent = this, Top = labelName.Bottom + 10, Left = labelName.Left };
    textBoxName.DataBindings.Add("Text", dataTable, "Name");

    var numericAge = new NumericUpDown { Parent = this, Top = textBoxName.Bottom + 10, Left = textBoxName.Left };
    numericAge.DataBindings.Add("Value", dataTable, "Age");
}

现在,您可以在DataGridView和ListBox中选择数据。

您还可以编辑DataGridView和TextBox以及NumericUpDown中的数据。