WinForms Grid Datasource不更新行数量

时间:2014-02-26 17:39:29

标签: c# winforms datagridview bindingsource

我有一个非常简单的问题。

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的行数。

1 个答案:

答案 0 :(得分: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之后,绑定数据肯定会发生变化,因此会监视更改通知。

我承认你的代码看起来应该像写的那样工作,因为将任何分配给GridView的DataSource属性应该注册为一个更改,但我仍然尝试上面的代码。我的WinForms绑定表现不一样,因为它“应该”这样做。我更喜欢WPF绑定!

[UPDATE] 您应该使用BindingList作为BindingSource的DataSource,并使用您的通用列表作为数据,因此:

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为List更改通知实现了一些好处: - )