ListまたはDataGridViewのソースとしてBindingListを設定すると、BindingListはプロパティのリストを取得し、それらを使用して列を生成します。DataGridViewはクラス内のプロパティのリストをどのように取得しますか?
私は次のような場合:
StatsList = new BindingList<ExpandoObject>();
// Add seed record to generate columns in DataGridView
dynamic ds = new ExpandoObject();
ds.key = "0000";
ds.Name = "Bob";
ds.Number = "2255442";
ds.key = "0001";
ds.Name = "Nathan";
ds.Number = "1217479";
StatsList.Add(ds);
dgvListView.DataSource = StatsList;
何も起こりません。 DataGridViewに列や行が追加されることはありません。私はDataGridViewがプロパティのコレクションを取得することができるメソッドがないので、それが推測しています。
上記のコードサンプルで、同じコードを実行してExpandoObjectをMyCustomClassに置き換えた場合、DataGridViewには正しく設定されます。
public class MyCustomClass
{
public string key { get; set; }
public string name { get; set; }
public string number { get; set; }
}
しかし、変更する可能性のあるソースからデータを読み込んでいるため、動的クラスを使用する必要があります。私はバインディングリストBindigListを含むいくつかのメソッドを試しましたが、どれも動的メンバーを列にバインドしません。私は、TryGetMemberとTrySetMemberのオーバーライドを使ってDynamicObjectを継承するクラスを作成しようとしました。
私は私の車輪を回転させ、簡単な解決策を見過ごしているように感じる。おそらく、私がここで紛失している辞書とLinqを使っていくつかのトリックがあります。
警告:私はデータを収集し、要約して表示しています。表示されたらデータを追加または削除する必要はありません。私はそれをフィルタリングしてソートしようとしています。私はそれを見せる方法を見つけたら、私はその橋を渡ります。
[ { 「match_numberを」:
私の例は、単純な既知の値と型を示しているが、私の実際のソースデータが少ない予測可能となり、次のように構造のNewtonsoft JSONを使用して、JSONから解析された1 、 "SET_NUMBER":1、 "キー": "2017onbar_f1m1"、 "score_breakdown":{ "青":{ "totalPoints":236、 "foulCount":1、 "adjustPoints":0、 "overtime":true }、 "red":{ "totalPoints":236、 "foulCount":1、 "adjustPoints":0、 "残業":真 } }、 "teammembers":{ "青":{ "チーム":[ "MEMBER1"、 "member2"、 "member3" ] }、 "赤":{ "チーム":[ "member4"、 "member5"、 "member6" ] } } }]
ただし、score_breakdownフィールドは異なります。
DataGridviewに 'dynamic'を使用する目的は何ですか?他の強い型付きオブジェクトの 'DataGridView.DataSource' wilコレクションです。 – Fabio
XY問題のように見えますが、そのソースからどのような種類のデータ(形式)を表示できますか? – Fabio
ソースデータは少し大きいですが、ソースはNewtonsoft.JSONを使用して変換されたJSONです。構造のいくつかは一定ですが、いくつかは変化します。 – Prdufresne