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 プロパティには、データソース内でデータアイテムの取得、更新、挿入、または削除を行うためのメソッド名を設定します。これらのプロパティを使用する場合は、以下の点に注意してください。

コードの使用

  1. データソースを設定します。 設定例については、後述の「サンプル」、または製品のインストール時に提供されるサンプルを参照してください。
  2. Spreadコンポーネントをデータセットに連結します。 詳細については「データソースとの連結」を参照してください。
  3. 必要に応じて、ItemTypeプロパティを設定します。
  4. 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       

関連トピック

 

 


© 2003-2015, GrapeCity inc. All rights reserved.