我是数据库和Windows窗体的新手,并且无法找到解决方案。我有一个带有ListBox的Windows窗体应用程序。 ListBox包含当前数据库中的所有条目。当我选择一个条目时,我想显示该选择的所有列。例如,如果我有一个表"人"条目,每个条目都有列年龄,体重,身高等数据,我想更改表格上的标签以对应选择的统计数据。
(我已经看到这是由数据绑定完成的,但这只适用于一个显示成员。)
基本上:
private void currentItems_SelectedIndexChanged(object sender, EventArgs e)
{
// something like:
// label1.Text = selectedId.ColumnValue1;
// label2.Text = selectedId.ColumnValue2;
// ...
}
作为一个子问题,我只会为这个应用程序处理一个小型数据库。有没有办法只需要调用一次Select语句,将所有数据放入DataTable,然后从中抽取?我想不断从数据库调用会很慢。
答案 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中的数据。