У меня есть элемент управления DataGridView, и я хочу заполнить его данными.
Я использую свойство DataSource
// dgvDealAsset is DataGridView
private void DealAssetListControl_Load(object sender, EventArgs e)
{
dgvDealAssets.AutoGenerateColumns = false;
dgvDealAssets.DataSource = DealAssetList.Instance.Values.ToList();
}
Теперь проблема номер один. Класс моей коллекции не содержит только простых типов, которые можно сопоставить со столбцами с помощью DataPropertyName. Это класс, который содержится в коллекции.
class MyClass
{
public String Name;
MyOtherClass otherclass;
}
class MyOtherClass
{
public String Name;
}
Теперь я привязываю свойства MyClass к столбцам
col1.DataPropertyName = "Name" // Ok
col2.DataPropertyName = "otherclass" // Not OK - I will have empty cell
Проблема в том, что я хочу отобразить поле otherclass.Name. Но если я попытаюсь написать
col2.DataPropertyName = "otherclass.Name"
Я получаю пустую клетку.
Я пытался вручную установить столбец
private void DealAssetListControl_Load(object sender, EventArgs e)
{
dgvDealAssets.AutoGenerateColumns = false;
dgvDealAssets.DataSource = DealAssetList.Instance.Values.ToList();
// iterate through rows and set the column manually
foreach (DataGridViewRow row in dgvDealAssets.Rows)
{
row.Cells["Column2"].Value = ((DealAsset)row.DataBoundItem).otherclass.Name;
}
Но этот цикл foreach занимает около минуты (2k элементов). Как решить эту проблему?