2009-02-26 99 views
4

私は子オブジェクトのコンポジットであるビジネスオブジェクトを持っています。
Visual Studio 2008でデータバインドを使用して、Windowsフォームのコントロールにバインドしています。DataMemberプロパティ[ObjectName]がデータソースで見つかりません

ただし、フォームのInitializeComponentメソッドで上記のエラーが発生しています。

一般的なリストChildListObjectを含むParentObjectというオブジェクトがあるとします。 ParentObjectにはChildオブジェクトもあり、それ自身はChildオブジェクトを持ちます。 (すなわちParentObject.ChildObject.ChildObject)

私はメインのバインディングソース設定:私は、グリッドを追加し、それがソースバインディングだ設定

BindingSource.Datasource = ParentObject 

を:

GridBindingSource.Datasource = ParentObject 

とするデータメンバーを設定します。

BindingSourceB.DataMember = "ChildListObject" 

ここで、グリッドのデータソースはGridBindingSource:

0123に設定されています
Me.MyDataGridView.DataSource = Me.GridBindingSource 

ありParentObjectと私は孤立したプロジェクトでこれをテストしているParentObject.ChildObject

のプロパティにバインドされている他のコントロールもあり、それが正常に動作しますので、私は見つける問題を抱えていますどのような本当のバグは?以前働いていたコードは、すべて突然動作しなくなります。

(私は上記の例では、オブジェクトの名前を使用している場合)私が手にエラーがある:

は、「データメンバープロパティChildObjectは は、データソースで見つけることができない」

それは失敗上:

Me.MyDataGridView.DataSource = Me.GridBindingSource 

不思議なことに、私は< System.Diagnostics.DebuggerStepThroughを(削除した場合)>それから失敗したら、それは良いですか?しかし、実行時にはまだ失敗します。

誰かが正しい方向に向けるアイデアはありますか?私が見つけたもっとも近いのは、生成されたデザイナーコードの順序が乱れているということです。動作していたコードは、すべて突然動作しなくなります。


この問題は発生しているようです。エラーが発生した後も私がちょうど続けると、プログラムはうまくいっても問題なく続きます。おそらくVSのバグ。しかし、実行時にエラーは依然として存在します。

この問題の原因は何ですか?どうやってそれをやめるの?

答えて

1

私がやって発見した唯一の回避策以下:

  1. がグリッドからすべての列を削除
  2. これは、次の手順で削除された列を防ぐ(グリッドに戻って必要な列を追加)
  3. グリッドデータソースを削除します
  4. フォームのロードイベントでグリッドのデータソースを設定します。
1

Datamemberは、表示するリストのプロパティを定義する文字列である必要があります。ここでは必要ありません。

これは理にかなって:

BindingSourceB.Datasource = ParentObject.ChildList; 

あなたがグリッドに結合する場合は、DataMemberプロパティを設定しないでください。データソースを設定してから、デザイナーを使ってグリッドを設定してください。

GetTypeはデザイナーを支援するためのものです。デザイナのプロパティでは、BindingSourceBをChildListObject型に設定し、上記の操作を行う必要があります。

+0

申し訳ありませんが、例が間違っていました。私は編集して修正しました。実際にはオブジェクトの間には存在せず、子オブジェクトの総称リストとして含まれる親オブジェクトだけが存在しました。 グリッドにdatamemberプロパティを設定していませんでした。とにかく助けてくれてありがとう。 – ptutt

+0

OK、私は自分の答えを編集しました。それが役に立つと願っています。 – gcores

2

ただ、このようなイベントにご生成するコードを移動:

private void MainForm_Load(object sender, EventArgs e) 
{ 
    Me.MyDataGridView.DataMember = "DataMember"; 
    Me.MyDataGridView.DataSource = "DataSource"; 
} 
3

私はこのことについていくつかの実験を試みた問題を あなたはそれをベースフォームとのBindingSourceを使用している場合のみ、この状態 で起こる 場合BaseForm から新しいInheritedFormを継承します.BindingSource(BaseFormに継承されています)に関連するInheritedFormの追加バインディングソースがある場合 デザイナーのエラーがあります。デザイナーの解決策はありませんが、無視してあなたは再び

をプロジェクトをビルドしながら、 すべてが正常であることが起こっているか、コードによって

0

をDataMemberを設定する必要があります、私は同じ問題

Private WithEvents _model As MyModel 

WithEventsを削除し、すべてが再び働いていた持っていた続行

Private _model As MyModel 
0

何らかの理由で、何らかの理由でエラーが手動で開かれるまでエラーウィンドウに登録されませんでした私のフォームの "デザイナー"。デザイナータスクを開くと、バインディングなどのエラーを手動で削除することができます。

これは私のプロジェクトからデータソースを削除したものの、その背後にあるすべてのコードを自動的に削除するわけではありません。

関連する問題