使用接口向XtraGrid添加行

时间:2012-11-09 19:59:15

标签: c# gridview interface devexpress xtragrid

我正在为我的网格DataSouce使用BindingList,如下所示:

private BindingList<IPeriodicReportGroup> gridDataList = 
    new BindingList<IPeriodicReportGroup>();

...

gridControl.DataSource = gridDataList;

我将主视图的OptionsBehaviour属性AllowDeleteRows和AllowAddRows设置为true,将NewItemRowPosition设置为Bottom。当我点击空行添加数据时,我得到一个异常,因为我的界面中没有构造函数 - 这是有道理的。有一个简单的方法吗?我认为它可能与处理事件InitNewRow有关,但我不太确定如何从那里开始。

感谢。

1 个答案:

答案 0 :(得分:3)

您可以使用以下方法(通过BindingList.AddingNew事件)在BindingList级别完成任务:

    gridView1.OptionsBehavior.AllowAddRows = DevExpress.Utils.DefaultBoolean.True;
    gridView1.OptionsBehavior.AllowDeleteRows = DevExpress.Utils.DefaultBoolean.True;
    gridView1.OptionsView.NewItemRowPosition = NewItemRowPosition.Bottom;
    //...
    var bindingList = new BindingList<IPerson>(){
        new Person(){ Name="John", Age=23 },
        new Person(){ Name="Mary", Age=21 },
    };
    bindingList.AddingNew += bindingList_AddingNew; //  <<--
    bindingList.AllowNew = true;
    gridControl1.DataSource = bindingList;
}

void bindingList_AddingNew(object sender, AddingNewEventArgs e) {
    e.NewObject = new Person(); //   <<-- these lines did the trick
}
//...
public interface IPerson {
    string Name { get; set; }
    int Age { get; set; }
}
class Person : IPerson {
    public string Name { get; set; }
    public int Age { get; set; }
}