【问题标题】:Why wouldn't a DataGridView show the Databound values?为什么 DataGridView 不显示数据绑定值?
【发布时间】: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,但我不明白为什么使用 AssetDisposalBindingSourceDataGridView 有效,但是使用DisposalCertificateBindingSource(不在加载时的活动选项卡上)的那个没有?

由于不工作,两个网格都显示了正确的行数,DataBoundItem 是我所期望的,但网格中的列不显示任何内容。什么可能导致这不显示数据绑定项中的值?

不确定是否相关,但设计者确实坚持为每个EntitySet&lt;T&gt;CountIsReadOnly 属性添加列。

【问题讨论】:

  • 如果您交换DisposalCertificateBindingSource 以绑定到加载时的活动选项卡怎么办?这行得通吗?正如您明确所说的那样,我正在问这个问题(它不在加载时的活动选项卡上)。
  • 我以前从未见过 DataSource 的 typeof:DisposalBindingSource.DataSource = typeof(MyLibrary.Disposal);。这与实体有关吗?
  • @LarsTech 一种用法是:对于像BindingSource 这样的无类型绑定源,如果将DataSource 设置为typeof(Something),绑定框架将能够在添加元素之前读取该类型的元数据它。比如使用DataGridViewAutoGenerateColumns时,如果列表为空,则不会生成没有BindingSource.DataSource = typeof(Something)的列。
  • @LarsTech 这也是你使用设计器创建BindingSource时生成的代码
  • 怎么不行?数据网格显示列但没有行(无数据)或全为空白?...如果全为空白可能是一个很长的镜头,但请检查您如何编写数据成员字符串...

标签: c# winforms datagridview bindingsource


【解决方案1】:

在我的例子中,这被证明是一件非常愚蠢的事情——我试图绑定的属性是private。将该属性设置为 public 解决了该问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-12-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-07
    • 1970-01-01
    • 2022-01-25
    相关资源
    最近更新 更多