数据网格视图不显示相关模型的数据?

Data Grid View not showing data from related models?

我有两个相关的 classes:

public class Dealer {
  public int Id { get; set; }
  public string BaseUrl { get; set; }
  public virtual ICollection<DealerAddress> DealerAddress { get; set; }
}

public class DealerAddress { 
  public int Id { get; set; }
  public int DealerId { get; set; }
  public string Email { get; set; }
  public virtual Dealer Dealer { get; set; }
}

在我的表单中,我想显示来自 DealerAddress class:

的数据
 public SortableBindingList<DealerAddress> Addresses = new SortableBindingList<DealerAddress>();   


 private void CreateDataGridView() {
    dataGridViewPlaceHolderPanel.Visible = false;
    dataGridView = new DataGridView();
    dataGridView.Name = "dataGridView";

    List<string> regularColumns = new List<string>()
    {
        nameof(DealerAddress.Id),
        nameof(DealerAddress.DealerId),
        nameof(DealerAddress.Dealer.BaseUrl),
        nameof(DealerAddress.Email),
    };

    var columns = new List<DataGridViewTextBoxColumn>();

    foreach (var regularColumnName in regularColumns)
    {
        var col = new DataGridViewTextBoxColumn
        {
            HeaderText = regularColumnName,
            DataPropertyName = regularColumnName,
            Name = "column" + regularColumnName
        };
        columns.Add(col);
    }
}

  public void SetAddresses(SortableBindingList<DealerAddress> addresses, int totalCount)
    {
        try
        {
            dataGridView.RowStateChanged -= DataGridView_RowStateChanged;
            Addresses = addresses;
            RefreshDataGridView();
        }
        finally
        {
            dataGridView.RowStateChanged += DataGridView_RowStateChanged;
        }
    }


    private void RefreshDataGridView(){
        if (Addresses == null || Addresses.Count == 0)
            return;

        dataGridView.DataSource = Addresses;
    }

而我的table中显示的数据是:

当我点击“SetAddresses”时,数据是从 DealerAddress 模型填充的,但它不显示来自“DealerAddress.Dealer”的列值。

TL;DR

使用以下方法快速修复它。在您的 DealerAddres 中,添加

    public string BaseUrl
    {
        get => Dealer.BaseUrl;

        set => Dealer.BaseUrl = value;
    }

正在解释

您有两个 class DealerAddressDealer。你set一个列表DealerAddressDataSource.

所以当DataGridView开始渲染时,它会搜索第一个class中的properties

当您执行 nameof(DealerAddress.Dealer.BaseUrl) 时,您实际上是在告诉 DataGridView,class DealerAddress 包含 属性 --- 它没有。


See this for more information.