2011-02-09 7 views
0

私はデフォルトのテキスト値で何もない30のボタンを持っています。私は何をしたいのデータベースからの注文データを取得している:ここでは.netのデータベースからボタンにテキスト値を割り当てますか?

は、データベース形式である:

今私はMSのためにOLEDBを使用して、特定の名前を選択するために、IDやカテゴリをつかむための関数を作成しました
ID  value     cat 
1  Button name    a 
2  Another name    a 
3  something     a 
.   .      a 
.   .      a 
.   .      a 
30  Last button    a 
1  Button name    b 
2  Another name    b 
3  something     b 
.   .      b 
.   .      b 
.   .      b 
18  Last button    b 

ACCESSデータベース。

button1.Show(); 
     ... 
     ... 
    button30.Show(); 
    button1.Text = getItem(1, a); 
    button2.Text = getItem(2, a); 
     .. 
     ... 
     ... 
    button30.text = getItem(30, a); 

再び変更されたカテゴリを変更するには、別のボタンがあります:フォームの負荷が、私は以下の機能を割り当てた時はいつでも今

private string getItem(int i, string a) { 
    //database connection 
    // database query and table slection where ID = i and cat = a 
    read the data in the selected column 
    return the string form of the column 
} 

:ここ

機能ですボタンのテキスト値:

button1.Text = getItem(1, b); 
    button2.Text = getItem(2, b); 
     . 
     . 
     . 
    button18.Text = getItem(18, b); 
    // because I have only 18 items I hide all the remaining buttons. 
    button19.Hide(); 
      ... 
    button30.Hide(); 

これはうまく動作しますが、問題はそれです遅すぎる。 フォームがロードされるたびに、すべてのデータをボタンに入力するのに時間がかかります。また、ボタンをクリックしてカテゴリを変更すると、そこにも発生します。

これを配列などで行う方法はありますか? 上記のコードでは、データベースに複数回アクセスする必要があり、処理が遅くなります。

もう1つの問題は、データベーステーブルに18個または30個未満のアイテムがある場合、既定の値で既定のボタンが表示されることです。私はbuttonx.Hideを(使用して、それを克服する上記のコードで

)xは任意の値を有していないすべての値のためである..

これらの全ては、手作業、必要な質量coddingあります。

私はこの問題を克服するための良い方法を知っていただければ幸いです。

+2

データベースにアクセスして30個のボタンを埋めるのではなく、大きなアクセス権を1つしか持たずデータからボタンを埋めることができませんでした。私はそれがあなたに大きなブーストを与えるはずだと思います。 –

+1

ところで、 "C#.Net"のようなものはありません。それはちょうど "C#"です。 –

答えて

4

乱雑なコードがたくさんありますので、これらのものです:

  • まず(これはデフォルトのテキストと浮遊ボタンを持っていることの問題を解決します)使用可能なすべてのbutttonsのすべての時間を持っていけません。代わりにあなたのコード(Form.Controls.Add())からフォーム上にそれらを生成して追加してください。

  • 複数の往復を行う代わりに。テーブルのキャッシュを保持し、代わりにこのDataTableをフェッチするDataTableをコード内に持っています。 (データがあまりにも揮発性の場合は、各項目クエリ全体のクエリを一度にクエリするのではなく、これを使用することはできません)LINQを使用してコードサイズを減らすためにDataTableをクエリできます。

0

Jeff Mが指摘したように、まず最初にすべきことは、単一のクエリを使用してすべてのレコードをロードすることです。

次に、レコードを繰り返しながらボタンを作成します。

関連する問題