6

ListBox.Refresh() メソッドを誤解しているようで、誰かが助けてくれることを望んでいました。

私がやろうとしていること:
Windows フォームの初期化時にリストボックスのデータ (ソース = SQL データベースのテーブル) をロードしたい。また、ユーザーがデータベースにデータを追加すると、リストボックスを更新したいと思います。

ロジック:
ソースとして sql データベースがあり、次のように設定されています。

listBoxDays.DataSource = DBQuery.informationRetreval().DefaultView;

DBquery.informationRetreval() は、DBQuery 静的クラス内の静的メソッドです。データベースからテーブルをセットアップし、テーブルを返すだけです。

initializeComponent と同じメソッド内でデータソースを設定します (リストボックスに既存のデータが読み込まれるようにします)。

public Settings()
    {
        InitializeComponent();
        listBoxDays.DataSource = DBQuery.informationRetreval().DefaultView;
    }

ユーザーがさらにデータを追加すると: データベースにデータを追加するメソッドを呼び出してから、次のように呼び出します。

    listBoxDays.Refresh(); //update listbox

問題: リストボックスが更新されません。リストボックスを初期化すると、データが入力されますが、その後は変更されません (したがって、更新は機能しません)。何故ですか?DataSource を再度設定することはできますが、それはだらしがありません。いくつかのドキュメントを調べた後、イベント ハンドラー DataSourceChanged に気付きました。それにもかかわらず、なぜ仕事をリフレッシュしないのでしょうか?

お待ちいただいてありがとうございます。もっと明確にする必要がある場合はお知らせください。

4

2 に答える 2

16

データではなく、オブジェクトが変更された場合 (別のクエリなど) にのみ更新されます。あなたはこれを行うことができます:

listBoxDays.DataSource = null;
listBoxDays.DataSource = DBQuery.informationRetreval().DefaultView;

必要なときにいつでも更新できます。

于 2013-02-19T23:49:02.453 に答える
9

Refresh(): コントロールのクライアント領域を強制的に無効にし、それ自体とすべての子コントロールをすぐに再描画します。

Refresh はコントロールを再バインドしません。コントロールが再描画されるだけです。DataSourceで再度設定する必要があります

listBoxDays.DataSource = DBQuery.informationRetreval().DefaultView;

そして結び直します。

出典:マイクロソフト MSDN

于 2013-02-19T23:43:29.617 に答える