2

次のように、グリッドの DataSouce に BindingList を使用しています。

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

...

gridControl.DataSource = gridDataList;

メイン ビューの OptionsBehaviour プロパティの AllowDeleteRows と AllowAddRows を true に設定し、NewItemRowPosition を Bottom に設定しました。空の行をクリックしてデータを追加すると、インターフェイスにコンストラクターがないため、例外が発生します。これは理にかなっています。これを回避する簡単な方法はありますか?おそらくInitNewRowイベントの処理に関係していると思いますが、そこからどうやって行くのかよくわかりません。

ありがとう。

4

1 に答える 1

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; }
}
于 2012-11-12T06:43:11.450 に答える