【发布时间】:2014-10-21 15:50:01
【问题描述】:
我遇到了一个中等复杂的情况,我与一堆BindingSources 建立了父子关系,所以我有:
DisposalBindingSource.DataSource = typeof(MyLibrary.Disposal);
DisposalCertificateBindingSource.DataMember = "DisposalCertificates";
DisposalCertificateBindingSource.DataSource = this.DisposalBindingSource;
AssetDisposalBindingSource.DataMember = "AssetDisposals";
AssetDisposalBindingSource.DataSource = this.DisposalBindingSource;
MyLibrary.Disposal 看起来有点像:
public class Disposal
{
private EntitySet<AssetDisposal> _certificates;
public ICollection<AssetDisposal> AssetDisposals
{
get
{
if (_certificates == null)
{
_certificates = new EntitySet<AssetDisposal>();
_certificates.SetSource(AssetDisposal.Search(this)); // return value happens to be BindingList<AssetDisposal>; Use SetSource so that ListChangedEvents fire correctly.
}
return _certificates;
}
}
private EntitySet<DisposalCertificate> _certificates;
public ICollection<DisposalCertificate> DisposalCertificates
{
get
{
if (_certificates == null)
{
_certificates = new EntitySet<DisposalCertificate>();
_certificates.SetSource(DisposalCertificate.Search(this)); // return value happens to be BindingList<DisposalCertificate>; Use SetSource so that ListChangedEvents fire correctly.
}
return _certificates;
}
}
}
现在,DataGridViews 上的 TabControl 的不同选项卡上都使用了两个子 BindingSources,但我不明白为什么使用 AssetDisposalBindingSource 的 DataGridView 有效,但是使用DisposalCertificateBindingSource(不在加载时的活动选项卡上)的那个没有?
由于不工作,两个网格都显示了正确的行数,DataBoundItem 是我所期望的,但网格中的列不显示任何内容。什么可能导致这不显示数据绑定项中的值?
不确定是否相关,但设计者确实坚持为每个EntitySet<T> 的Count 和IsReadOnly 属性添加列。
【问题讨论】:
-
如果您交换
DisposalCertificateBindingSource以绑定到加载时的活动选项卡怎么办?这行得通吗?正如您明确所说的那样,我正在问这个问题(它不在加载时的活动选项卡上)。 -
我以前从未见过 DataSource 的 typeof:
DisposalBindingSource.DataSource = typeof(MyLibrary.Disposal);。这与实体有关吗? -
@LarsTech 一种用法是:对于像
BindingSource这样的无类型绑定源,如果将DataSource设置为typeof(Something),绑定框架将能够在添加元素之前读取该类型的元数据它。比如使用DataGridViewAutoGenerateColumns时,如果列表为空,则不会生成没有BindingSource.DataSource = typeof(Something)的列。 -
@LarsTech 这也是你使用设计器创建
BindingSource时生成的代码 -
怎么不行?数据网格显示列但没有行(无数据)或全为空白?...如果全为空白可能是一个很长的镜头,但请检查您如何编写数据成员字符串...
标签: c# winforms datagridview bindingsource