2011-01-14 30 views
1

次の2つのコードスニペットは、BindingSourceにデータを埋め込み、後で DataGridView.DataSourceに割り当てられます。DataGridView.DataSourceプロパティとBindingSourceを使用してDataGridViewにデータを入力

具象クラスQuotesTool.LineItemが使用される(最初のスニペット)グリッドは適切なデータが表示されない:

のBindingSource lineList =新規のBindingSourceを();

 foreach (XElement y in _lines.Elements()) 
     { 
      lineList.Add(new QuotesTool.LineItem(
       y.Element("Vendor").Value, 
       y.Element("Model").Value, 
       y.Element("Selling_Unit").Value, 
       y.Element("Net_Price").Value, 
       y.Element("Spec").Value 
         )); 
     } 

しかし、匿名型が使用されている場合、グリッドはデータのOKが表示されます。

 foreach (XElement y in _lines.Elements()) 
     { 
      lineList.Add(
       new { 
       vendor = y.Element("Vendor").Value, 
       Model = y.Element("Model").Value, 
       UOM = y.Element("Selling_Unit").Value, 
       Price = y.Element("Net_Price").Value, 
       Description = y.Element("Spec").Value 
      }); 
     } 

任意のアイデアをいただければ幸いです。ありがとう。

答えて

1

有用であることが、デフォルトでQuotesTool.LineItemが、を見ずに伝えるのは難しい、各メンバー:

  • プロパティ(ないフィールド)でなければなりません
  • パブリックでなければなりませんでなければなりませんここでの問題は モミの通常一つです [Browsable(false)]

をマーク2つ。例えば、これらはいずれも、デフォルトでは動作しません:

public string Vendor; 

internal string Vendor {get;set;} 

[Browsable(false)] public string Vendor {get;set;} 

が、これは以下となります。それは自動的に実装プロパティである必要はありません、またそれが書き込み可能である必要がないことを

public string Vendor {get;set;} 

注意を:

private readonly string vendor; 
public string Vendor { get { return vendor; } } 
+0

ありがとうございました。クラスフィールドを[プロパティ]に変更すると、トリックが実行されました! – user575719

+0

@ user575719良い;パブリックフィールドは普遍的には正直言って悪い考えです。これがあなたの質問に答えるなら、答えの隣に緑色の「ダニ」をクリックして、それが完了したことを示すことを検討してください。 –

関連する問題