PowerTools SPREAD for ASP.NET 8.0J > 開発者の手引き > データ連結 > モデルバインディング |
SPREADは、ASP.NET 4.5以降で提供されるモデルバインドをサポートします。 SPREADでモデル連結を処理するには、FpSpread クラスまたは、SheetView クラスの以下のプロパティを使用します。
モデルバインドは、.NET 4.5以上のみで実行されます。これ以外の.NET環境でモデルデータ連結を使用しようとしても、何も行われません。 1つのプロジェクト内でモデルデータ連結とDataSourceIDプロパティを同時に使用すると、コンポーネントから例外がスローされます。
ItemType プロパティは、モデルデータ連結に使用されるデータアイテムの種類を示します。 デフォルトでは、このプロパティは空です。 このプロパティは、型付けされたデータ連結を使用する場合に設定します。 ItemType プロパティ、シートのSelectMethod プロパティを設定すると、.NET Frameworkは、ItemType プロパティによって宣言されたデータ型にデータアイテムをキャストしようとします。したがって、ItemTypeとSelectMethod プロパティを同じデータ型に設定するか、またはSelectMethodを親のデータ型に設定する必要があります。
SelectMethod、UpdateMethod、InsertMethod、およびDeleteMethod プロパティには、データソース内でデータアイテムの取得、更新、挿入、または削除を行うためのメソッド名を設定します。これらのプロパティを使用する場合は、以下の点に注意してください。
次のサンプルコードは、本製品のインストール時に提供されるサンプルで使用されるモデルデータ連結プロパティの動作を示します。
.aspxページに、次のコードを追加します。
<Sheets> <FarPoint:SheetView SheetName="Sheet1" AllowDelete="true" AllowInsert="true" ItemType="DeptModel.User" SelectMethod="GetUsers" UpdateMethod="UpdateUser" DeleteMethod="DeleteUser" InsertMethod="InsertUser"> </FarPoint:SheetView> </Sheets>
public IQueryable GetUsers() { DeptEntities db = new DeptEntities(); return db.Users.AsQueryable(); } public bool UpdateUser(string login, string fullName, string email, string description) { int rowsAffected = -1; using (DeptEntities db = new DeptEntities()) { // 更新するには、データベース内にユーザーが存在する必要があります。 User found = db.Users.FirstOrDefault(u => u.Login == login); if (found == null) return false; // ログイン名以外のすべてのユーザープロパティは変更できます。 found.FullName = fullName; found.Email = email; found.Description = description; if (ModelState.IsValid) { rowsAffected = db.SaveChanges(); } } // この更新の実行後は、1人のユーザーだけが更新される必要があります(一度に1行のみ)。 return rowsAffected == 1; } public bool InsertUser(string login, string fullName, string email, string description) { int rowsAffected = -1; using (DeptEntities db = new DeptEntities()) { // ログイン名は一意である必要があります。 User found = db.Users.FirstOrDefault(u => u.Login == login); if (found != null) { string exceptionMessage = string.Format("Login name should be unique. There is an existing user with the login name of {0}", login); throw new InvalidOperationException(exceptionMessage); } // 新規ユーザーを作成します。 var user = new User() { Login = login, FullName = fullName, Email = email, Description = description }; // ユーザーをモデルに追加してから、変更をコミットします。 if (ModelState.IsValid) { db.Users.AddObject(user); rowsAffected = db.SaveChanges(); } } return rowsAffected == 1; } public bool DeleteUser(string login) { int rowsAffected = -1; using (DeptEntities db = new DeptEntities()) { User found = db.Users.FirstOrDefault(u => u.Login == login); if (found != null) { db.Users.DeleteObject(found); rowsAffected = db.SaveChanges(); } } return rowsAffected == 1; }
Public Function GetUsers() As IQueryable(Of User) Dim db As New DeptEntities() Return db.Users.AsQueryable() End Function Public Function UpdateUser(login As String, fullName As String, email As String, description As String) As Boolean Dim rowsAffected As Integer = -1 Using db As New DeptEntities() ' 更新するには、データベース内にユーザーが存在する必要があります。 Dim found As User = db.Users.FirstOrDefault(Function(u) u.Login = login) If found Is Nothing Then Return False End If ' ログイン名以外のすべてのユーザープロパティは変更できます。 found.FullName = fullName found.Email = email found.Description = description If ModelState.IsValid Then rowsAffected = db.SaveChanges() End If End Using ' この更新の実行後は、1人のユーザーだけが更新される必要があります(一度に1行のみ)。 Return rowsAffected = 1 End Function Public Function InsertUser(login As String, fullName As String, email As String, description As String) As Boolean Dim rowsAffected As Integer = -1 Using db As New DeptEntities() ' ログイン名は一意である必要があります。 Dim found As User = db.Users.FirstOrDefault(Function(u) u.Login = login) If found IsNot Nothing Then Dim exceptionMessage As String = String.Format("Login name should be unique. There is an existing user with the login name of {0}", login) Throw New InvalidOperationException(exceptionMessage) End If ' 新規ユーザーを作成します。 Dim user = New User() With { _ .Login = login, _ .FullName = fullName, _ .Email = email, _ .Description = description _ } ' ユーザーをモデルに追加してから、変更をコミットします。 If ModelState.IsValid Then db.Users.AddObject(user) rowsAffected = db.SaveChanges() End If End Using Return rowsAffected = 1 End Function Public Function DeleteUser(login As String) As Boolean Dim rowsAffected As Integer = -1 Using db As New DeptEntities() Dim found As User = db.Users.FirstOrDefault(Function(u) u.Login = login) If found IsNot Nothing Then db.Users.DeleteObject(found) rowsAffected = db.SaveChanges() End If End Using Return rowsAffected = 1 End Function