2009-04-14 16 views
1

私は、テンプレートからの情報の集まりによって読み込まれ、残りの部分を書き込むためにユーザーに渡されるフォームを持っています。つまり、データベースとの間で(スキーマの制御がないので)、すべてのコントロールをバインドするのに最適な場所のように思えるので、最終結果を保持するテンプレートとオブジェクトはDataRowsですもっと重要なことをやってみるのよね?データバインディングは私が好きなものより複雑です

コントロールを正しくバインドすることができません。これは、行をスローしたい、行のどの列が重要なのかを把握して、だから私は頻繁にコントロールを期待するすべての列を持っていない行を投げているので、彼らは例外をスローします。しかし、それはこれをやっているので、部分的にI-ドント・ノウ誰が障害だだ:

TemplateBinderは、私が出てトリクル充電したいのDataRowに設定DataSourceプロパティを持つのBindingSourceオブジェクトである私が行くとき、例外をスロー
inProductName.DataBindings.Add("Text", TemplateBinder, "ProductName"); 

フォームを表示します。テンプレート行を取得するまで、TemplateBinderにはDataSourceが含まれていません。バインディングを設定する代わりに、自分自身を設定し、ページの上部にある忘れてしまった場合はバインディングを管理する必要があります束縛から多くの価値を引き出す。

これは私がしようとしていることが実現可能かどうかを確認するためのテストに過ぎません!私はフォームに伝播したい値が含まれている行をBindingSourceに渡そうとしています。バインディングを中断し、テーブルから空行を切り換えて、伝播した値が、フォームを表示し、ユーザーに記入させてからバインドを再度オンにして、コントロールのバインドされたプロパティがBindingSource DataSourceとして設定した空白の行にトリクルするようにします。それは簡単すぎるかもしれないので、動作する方法はありませんが、30ケースのswitch文が含まれていた古い方法ではなく、そうすることができればいいと思います。

私はここでウサギの穴をあまりに遠くに行きたくありません。 Visual Studioには、すべてを自動的にすべて設定するという魅力的なボタンがありますが、Visual Studioでデータベースのスキーマが変更されないというアイデアが嫌なVisual Studioの経験があります。さらに、私はどのように(私のクライアントでもなく)クライアントのこの柔軟なオートマチックセットアップからの柔軟性を得る方法がわかりません(接続文字列をプログラム的に混乱させる方法はわかりません)。私が持っているコピー貼り付けされたコードは、ある種の非常に便利な機能が不便になるシーンの背後に徹底的な変更を加えたので、おそらく機能を殺すよりも罪の少ないものです。 Copypastaは、アプリケーション全体を書き換えるよりもはるかに早く機能に変換することができます。データベースが変更された場合はどうなりますか?オートマジックコードは、何かをするのに十分な情報がないと、自尊心を呑み込むだけでなく、何もしないという例外を投げることを好むようです。

だから、Stack Overflow、the tl; dr:私がやったすべてを捨てさせるのではなく、私のためにデータバインディングをしたいのです。私はできますか?

答えて

1

私はそれが機能するためにはDataRowViewでなく、DataRowを使用する必要があると思います。これをDataTableではなくDataViewから取得してみてください。デフォルトビューはtable.DefaultViewです。

info; DataTableをバインディングソースとして使用すると動作する理由は、DataTableIListSourceを実装し、デフォルトのビューを返します(GetList()から)。実際にはDataTableにバインドすると、が有効になります。ビュー(DataView)。

関連する問題