2016-06-16 13 views
0

データベースとWindowsフォームが新しく、これに対する解決策を見つけることができませんでした。私はListBoxを持つWindowsフォームアプリケーションを持っています。 ListBoxには、現在のデータベースのすべてのエントリが含まれます。エントリを選択すると、その選択のすべての列が表示されます。たとえば、「人」というエントリのテーブルがあり、各エントリに年齢、体重、高さなどのデータがある場合は、選択肢の統計に対応するようにフォームのラベルを変更したいと考えています。Windowsフォームでリストボックスの選択を変更するときに複数のデータを更新する

(私はこれがデータバインディングによって行わ見てきましたが、これは一つだけ表示部材で動作することができます。)

、本質的に:

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

サブ問題として、私は唯一の対処されますこのアプリケーション用に1つの小さなデータベースを使用します。 Select文を一度呼び出すだけで、すべてのデータをDataTableに入れ、それから描画するだけの方法はありますか?私は絶えずデータベースからの呼び出しが遅いと想像しています。

答えて

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のデータを編集することもできます。

関連する問題