ストレージデータのリストがあります
List<List<string>> data = new List<List<string>>();
正しく割り当てる方法はdataGridView.DataSource
?
ストレージデータのリストがあります
List<List<string>> data = new List<List<string>>();
正しく割り当てる方法はdataGridView.DataSource
?
List<List<string>> data = new List<List<string>>();
dataGridView.DataSource = data;
dataGridView.Databind();
一部のポスターが述べているように、これはWindowsフォーム用であり、その場合は(MSDNによると)jstはdatabindではなくdatasurceを設定できます
ここでの問題は、(明らかに)DataGridViewDataSourceプロパティがを表示する方法を知らないことList<List<string>>
です。1つのアプローチは、リストをDataGridViewがバインドできる1つのオブジェクトに結合することです。これを行うには、いくつかの方法があります。
DataTableへ:
あなたをDataTableに変換するために、ここList<List<string>>
にあるコードを借りて、次の拡張メソッドを作成しました。
static class ListExtensions {
public static DataTable ToDataTable(this List<List<string>> list) {
DataTable tmp = new DataTable();
tmp.Columns.Add("MyData");
// Iterate through all List<string> elements and add each string value to a new DataTable Row.
list.ForEach(lst => lst.ForEach(s => tmp.Rows.Add(new object[] {s})));
return tmp;
}
}
これで、この拡張メソッドを使用List<List<string>>
して、DataGridViewにバインドできるDataTableを取得できます。
dataGridView.DataSource = data.ToDataTable();
匿名型リストへ:
これを行うためのコードは次のとおりです。
dataGridView.DataSource = data.SelectMany(lst => lst)
.Select(s => new { Value = s }).ToList();
ここで説明するように、DataGridViewは少しの助けなしにListプロパティの文字列値を表示できないため、匿名型が必要です。
もちろん、これらのアプローチには不利な点もありますが、これらの方針に沿った何かが最善の選択肢であると私は信じています。