簡體   English   中英

數據網格視圖不顯示來自相關模型的數據?

[英]Data Grid View not showing data from related models?

我有兩個相關的課程:

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 類中的數據:

 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;
    }

我的表中顯示的數據是:

在此處輸入圖片說明

當我點擊“SetAddresses”時,數據是從 DealerAddress 模型填充的,但它不顯示來自“DealerAddress.Dealer”的列值。

TL; 博士

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

    public string BaseUrl
    {
        get => Dealer.BaseUrl;

        set => Dealer.BaseUrl = value;
    }

解釋

你有兩個類DealerAddressDealer set DealerAddress列表setDataSource

所以當DataGridView開始渲染時,它會搜索第一個類中的properties

當您執行nameof(DealerAddress.Dealer.BaseUrl)您實際上是在告訴DataGridViewDealerAddress包含該屬性 --- 它沒有。


有關詳細信息,請參閱此內容

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM