【问题标题】:WinForms Grid Datasource does not update rows quantityWinForms Grid Datasource 不更新行数
【发布时间】:2014-02-26 17:39:28
【问题描述】:

我有一个很简单的问题。

List<OrderTripChangedAlertItem> da = new List<OrderTripChangedAlertItem>();
            da.Add(new OrderTripChangedAlertItem(1, "2", "3"));

            BindingSource bs = new BindingSource();
            bs.DataSource = da;

            GridView.DataSource = bs;

还有课

public class OrderTripChangedAlertItem
{
    public int RecordID { get; set; }
    public string RecordInformation { get; set; }
    public string RecordType { get; set; }

    public OrderTripChangedAlertItem(int recordID, string recordInformation, string recordType)
    {
        RecordID = recordID;
        RecordInformation = recordInformation;
        RecordType = recordType;
    }
}

为什么我有 GridView.Rows = 0 ?这是 Telerik 的网格,但我与通常的 DataGridView 相同。

用通用列表填充网格视图的正确方法是什么? 因为我已经花了半天时间,无法填满网格。 我也尝试了 BindingList 和 Datatable,但没有成功。

我只能写 GridView.Rows.Add(1, "2", "3");然后才能在网格中看到这个记录。当然,这不是我想要的。我需要绑定一个列表。

PS 我什至尝试了一些 List{string} 和 DataGridView 也没有大于 0 的行数。

【问题讨论】:

  • 您能否单步执行您的代码并告诉我da 中的项目Count?网格似乎没有什么可以绑定的。您是否看到列名但没有数据?
  • da.Add(new OrderTripChangedAlertItem(1, "2", "3"));总是有数据。是的,我可以看到列,我通过代码而不是自动生成它们。
  • 这很奇怪.. 但我相信 Jon 更新中的解决方案是处理这个问题的正确方法。

标签: c# winforms datagridview bindingsource


【解决方案1】:

我不是 WinForms 绑定专家,但我一直在解决自己的一些问题,我想知道您的问题是否是分配和绑定的顺序。

我会试试这个

List<OrderTripChangedAlertItem> da = new List<OrderTripChangedAlertItem>();

BindingSource bs = new BindingSource();
bs.DataSource = da;

GridView.DataSource = bs;

da.Add(new OrderTripChangedAlertItem(1, "2", "3"));

这样在 DataGrid 绑定到 BindingSource 之后,绑定的数据肯定会发生变化,因此会监视更改通知。

我承认您的代码似乎应该像编写的那样工作,因为将 anything 分配给 GridView 的 DataSource 属性应该注册为更改,但我还是会尝试上述方法。我对 WinForms 绑定行为“应该”的行为产生了好坏参半的结果。我更喜欢 WPF 绑定!

[更新] 您应该使用 BindingList 作为 BindingSource 的数据源,并使用通用列表作为数据,所以:

List<OrderTripChangedAlertItem> da = new List<OrderTripChangedAlertItem>();

BindingList bl = new BindingList<OrderTripChangedAlertItem>(da);
BindingSource bs = new BindingSource();
bs.DataSource = bl;

GridView.DataSource = bs;

da.Add(new OrderTripChangedAlertItem(1, "2", "3"));

我忘记了细节,但是 BindingList 为列表更改通知实现了一些不错的功能:-)

【讨论】:

  • 啊,我刚刚注意到您没有使用 BindingList 作为中间存储。我检查了我的一些工作代码并发现了额外的步骤。将使用另一个代码示例编辑我的建议...
  • 我还有 0 行,所以网格中没有数据。不知道怎么想
猜你喜欢
  • 2015-11-12
  • 2015-10-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-11-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多