私は次のような構造を持っています
X={ID="1", Name="XX",
ID="2", Name="YY" };
このデータを2列のDataGridView
にダンプする方法
GridViewは次のようなものです
ID | Name
LINQを使用してこれを行うことはできますか?私はDataGridView
に不慣れです。Pleaeseがこれを行うのを手伝ってくれます。
前もって感謝します
まず、datagridに2つの列を追加する必要があります。設計時に行うことができます。 Columnsプロパティを参照してください。次に、必要なだけ行を追加します。
this.dataGridView1.Rows.Add("1", "XX");
これを行うための私のお気に入りの方法は、「マップ」と呼ばれる拡張関数を使用することです。
public static void Map<T>(this IEnumerable<T> source, Action<T> func)
{
foreach (T i in source)
func(i);
}
次に、次のようにすべての行を追加できます。
X.Map(item => this.dataGridView1.Rows.Add(item.ID, item.Name));
次のようなクラスがあるとしましょう。
public class Staff
{
public int ID { get; set; }
public string Name { get; set; }
}
そして、DataGridView
をフォームにドラッグアンドドロップしたと仮定し、dataGridView1という名前を付けます。
DataGridView
をバインドするためのデータを保持するには、 BindingSource が必要です。これがあなたがそれをすることができる方法です:
private void frmDGV_Load(object sender, EventArgs e)
{
//dummy data
List<Staff> lstStaff = new List<Staff>();
lstStaff.Add(new Staff()
{
ID = 1,
Name = "XX"
});
lstStaff.Add(new Staff()
{
ID = 2,
Name = "YY"
});
//use binding source to hold dummy data
BindingSource binding = new BindingSource();
binding.DataSource = lstStaff;
//bind datagridview to binding source
dataGridView1.DataSource = binding;
}
LINQは「クエリ」言語(つまりQ)であるため、データの変更はその範囲外です。
そうは言っても、あなたのDataGridView
はおそらくItemsSource
にバインドされており、おそらくタイプ_ObservableCollection<T>
_または同様のものです。その場合は、X.ToList().ForEach(yourGridSource.Add)
のようなことをしてください(これは、グリッド内のソースのタイプに基づいて調整する必要がある場合があります)。
あなたはあなたのコードからこのようにするべきです
DataGridView.DataSource = yourlist;
DataGridView.DataBind();