数据网格视图不显示相关模型的数据?
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 DealerAddress
和 Dealer
。你set
一个列表DealerAddress
到DataSource
.
所以当DataGridView
开始渲染时,它会搜索第一个class中的properties
。
当您执行 nameof(DealerAddress.Dealer.BaseUrl)
时,您实际上是在告诉 DataGridView
,class DealerAddress
包含 属性 --- 它没有。
See this for more information.
我有两个相关的 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 DealerAddress
和 Dealer
。你set
一个列表DealerAddress
到DataSource
.
所以当DataGridView
开始渲染时,它会搜索第一个class中的properties
。
当您执行 nameof(DealerAddress.Dealer.BaseUrl)
时,您实际上是在告诉 DataGridView
,class DealerAddress
包含 属性 --- 它没有。
See this for more information.