0

Form Designer アプリケーションを作成しました。以下のスクリーンショットをご覧ください。ユーザーは画面をデザインし、名前を付けて保存できます。ユーザーがフォームを保存すると、アプリケーションはコントロールのタイプ (テキストボックス、ラベル、ボタン...)、名前、幅、高さ、位置 x、位置 y などを保存するだけです。

ここに画像の説明を入力

ここで、ユーザーが SQL SELECT STATEMENT をアプリケーションに保存できるようにし、その SQL SELECT STATEMENT からユーザーが作成したコントロールにデータテーブルをバインドできるようにします。

たとえば、ユーザーがこの SELECT ステートメントを以下のように保存したとします。

SELECT ID,NAME, LASTNAME FROM PERSONS

ユーザーが作成したフォームには3つのテキストボックスがあります。それらを互いにバインドするにはどうすればよいですか?

手がかりを教えてもらえますか?

4

1 に答える 1

1

データベースから直接個々のコントロールにプルしているため、データ バインディングを回避して、テキスト ボックスに直接入力することができる場合があります。

たとえば、ユーザーが設計したフォームを初期化するときに、次のすべてを列挙できますTextBoxes

var textControls = Controls.OfType<TextBox>().ToList();

次に、実際にステートメントを実行すると、これらのコントロールをSELECT動的に設定できます。TextBox

using (var conn = new SqlConnection())
{
    conn.Open();
    var command = new SqlCommand(selectStatement, conn);
    using (var rdr = command.ExecuteReader())
    {
        rdr.Read();
        int i = 0;
        while (i < rdr.FieldCount)
        {
            textControls[i].Text = rdr.GetString(i++);
        }
    }
}

上記のコードの良いところは、ユーザーがデザインしたフォームにフィールドやテキストボックスがいくつあっても、作成するすべてのフォームで同一であることです。

結果をデータベースに保存する必要がある場合は、フォームを閉じたときに同様のプロセスを実行できます。つまり、 を列挙TextBoxesし、クエリ文字列のパラメーターを作成してから実行します。

同様に、データバインドしたい場合は、SQL データを (コントロールに直接List<>読み込むのではなく) 読み込むフィールドを作成できます。TextBox次に、TextBoxコントロールを列挙し、 の対応するフィールドでデータ バインディングを設定しますList<>

于 2013-08-02T12:09:27.487 に答える