バージョン

xamGrid コントロールの代わりに xamDataGrid コントロールを使用してください。xamGrid は数年以内に廃止する予定のため、新しい機能の追加はありません。xamGrid のサポートおよび重要なバグ修正は廃止時まで提供されます。コードベースの xamDataGrid への移動に関する質問は、サポートまでお問い合わせください。

RequireEmptyConstructor 例外

エンドユーザーが xamGrid コントロールに新しい行の追加を試みると、グリッドはグリッドにバインドされるデータ オブジェクト タイプの新しいインスタンスの作成をまず試みます。

たとえば、グリッドが顧客オブジェクトのリストにバインドされている場合、エンドユーザーが新しい行の追加を試みると、グリッドは新しい Customer オブジェクトを作成します。

このトピックは、新しい行を追加するシナリオを説明します。

これを成功させるには、オブジェクトにデフォルト コンストラクターを含める必要があります。これによりグリッドはデフォルト コンストラクターを使用して新しいオブジェクト インスタンスを作成することができます。ただし、特定の状況では、デフォルト コンストラクターを含まないオブジェクトのコレクションにバインドしなければならない場合があります。デフォルト コンストラクターがない場合、エンドユーザーが新しい行をコントロールに追加しようと試みると、xamGrid コントロールは RequireEmptyConstructor 例外をスローします。

この問題を解決するために、オブジェクトにデフォルト コンストラクターがあることを確認します。

C# の場合:

public class Person
{
   public Person()
   {
   }
   public Person(string firstName, string lastName, int age, double height,   DateTime born, string address)
   {
      this.FirstName = firstName;
      this.LastName = lastName;
      this.Age = age;
      this.Height = height;
      this.Born = born;
      this.Address = address;
   }
   public string FirstName { get; set; }
   public string LastName { get; set; }
   public int Age { get; set; }
   public double Height { get; set; }
   public DateTime Born { get; set; }
   public string Address { get; set; }
}

オブジェクトを自分で修正することは常に可能ではないため、xamGrid コントロールの DataObjectRequested イベントを処理して、新しいオブジェクトの要求を遮断することができます。このイベントは、DataManager は新しい基本データ オブジェクトの作成を試みようとすると発生します。このイベントのパラメーターでは、メンバーは e. NewObject と呼ばれます。このオブジェクトをデータ オブジェクトの新しいインスタンスに設定しますが、新しいオブジェクトの作成を試みる代わりにこれがグリッドによって使用されます。

C# の場合:

ig.DataObjectRequested += new EventHandler<DataObjectCreationEventArgs>(ig_DataObjectRequsted);
void ig_DataObjectRequsted(object sender, DataObjectCreationEventArgs e)
{
   if (e.ObjectType == typeof(Person))
     e.NewObject = new Person(null, null, 0, 0, DateTime.Today, null);
}

関連トピック