Spread for ASP.NET 表格控件提供了 ASP.NET 4.5 下的模式绑定。Spread 控件提供 ItemType 属性,例如 SelectMethod,UpdateMethod,InsertMethod 和 DeleteMethod 属性用户模式绑定操作。
注意,模式绑定功能只适用于 .NET 4.5 及以上版本;在较低版本中使用模式绑定无效。如果使用同时使用模式绑定和 DataSourceID,控件将抛出异常。
ItemType 属性用于声明使用模式绑定中的数据。默认情况下,它是空的。如果你设置 ItemType 和表单的 SelectMethod 属性,.NET Framework 会尝试转换数据为 ItemType 类型。因此,您需要设置 ItemType 和 SelectMethod 属性为同一数据类型。或者设置 SelectMethod 属性为一个父数据类型。否则,控件会抛出异常。
SelectMethod, UpdateMethod, InsertMethod, 和 DeleteMethod 属性用于设置获取、更新、插入和删除数据项对应的方法。注意以下几点:
如果您设置了其中几个属性,它们将自动合并到模式绑定的属性中。
如果您只设置了 SelectMethod 属性,而没有设置其他属性。当对数据进行增删改查时,控件将抛出异常。
属性对应的方法必须是在本页面后台方法中,否则 ,.NET Framework 将抛出异常。当前 >NET Framework 仅支持公共方法。
使用代码:
创建数据源。
绑定 Spread 表格控件到数据源。
如果你愿意,可以设置 ItemType 属性。
设置 SelectMethod, UpdateMethod, InsertMethod, 和 DeleteMethod 属性为对应的后台方法。
示例
该实例演示了如何实现模式绑定。
1: <Sheets>
2: <FarPoint:SheetView SheetName="Sheet1"
3: AllowDelete="true" AllowInsert="true"
4: ItemType="DeptModel.User"
5: SelectMethod="GetUsers" UpdateMethod="UpdateUser" DeleteMethod="DeleteUser" InsertMethod="InsertUser">
6: </FarPoint:SheetView>
7: </Sheets>
把下面的代码添加到对应的后台页面中。
1: C#
2:
3: public IQueryable<User> GetUsers()
4: {
5: DeptEntities db = new DeptEntities();
6: return db.Users.AsQueryable();
7: }
8:
9:
10: public bool UpdateUser(string login, string fullName, string email, string description)
11: {
12: int rowsAffected = -1;
13: using (DeptEntities db = new DeptEntities())
14: {
15: // user should exist in the database in order to be updated
16: User found = db.Users.FirstOrDefault(u => u.Login == login);
17:
18: if (found == null) return false;
19:
20: // except login name, all other properties of a user can be changed
21: found.FullName = fullName; found.Email = email; found.Description = description;
22:
23: if (ModelState.IsValid)
24: {
25: rowsAffected = db.SaveChanges();
26: }
27: }
28:
29: // there should only be one user updated after running this update (1 row at a time)
30: return rowsAffected == 1;
31: }
32:
33:
34: public bool InsertUser(string login, string fullName, string email, string description)
35: {
36: int rowsAffected = -1;
37: using (DeptEntities db = new DeptEntities())
38: {
39: // login name should be unique
40: User found = db.Users.FirstOrDefault(u => u.Login == login);
41: if (found != null)
42: {
43: string exceptionMessage = string.Format("Login name should be unique. There is an existing user with the login name of {0}", login);
44: throw new InvalidOperationException(exceptionMessage);
45: }
46: // create new User
47: var user = new User()
48: {
49: Login = login,
50: FullName = fullName,
51: Email = email,
52: Description = description
53: };
54:
55: // add user to model, then commit changes
56: if (ModelState.IsValid)
57: {
58: db.Users.AddObject(user);
59: rowsAffected = db.SaveChanges();
60: }
61: }
62:
63: return rowsAffected == 1;
64: }
65:
66: public bool DeleteUser(string login)
67: {
68: int rowsAffected = -1;
69: using (DeptEntities db = new DeptEntities())
70: {
71: User found = db.Users.FirstOrDefault(u => u.Login == login);
72: if (found != null)
73: {
74: db.Users.DeleteObject(found);
75: rowsAffected = db.SaveChanges();
76: }
77: }
78: return rowsAffected == 1;
79: }
80: VB
81:
82: Public Function GetUsers() As IQueryable(Of User)
83: Dim db As New DeptEntities()
84: Return db.Users.AsQueryable()
85: End Function
86: Public Function UpdateUser(login As String, fullName As String, email As String, description As String) As Boolean
87: Dim rowsAffected As Integer = -1
88: Using db As New DeptEntities()
89: ' user should exist in the database in order to be updated
90: Dim found As User = db.Users.FirstOrDefault(Function(u) u.Login = login)
91:
92: If found Is Nothing Then
93: Return False
94: End If
95:
96: ' except login name, all other properties of a user can be changed
97: found.FullName = fullName
98: found.Email = email
99: found.Description = description
100:
101: If ModelState.IsValid Then
102: rowsAffected = db.SaveChanges()
103: End If
104: End Using
105:
106: ' there should only be one user updated after running this update (1 row at a time)
107: Return rowsAffected = 1
108: End Function
109:
110: Public Function InsertUser(login As String, fullName As String, email As String, description As String) As Boolean
111: Dim rowsAffected As Integer = -1
112: Using db As New DeptEntities()
113: ' login name should be unique
114: Dim found As User = db.Users.FirstOrDefault(Function(u) u.Login = login)
115: If found IsNot Nothing Then
116: Dim exceptionMessage As String = String.Format("Login name should be unique. There is an existing user with the login name of {0}", login)
117: Throw New InvalidOperationException(exceptionMessage)
118: End If
119: ' create new User
120: Dim user = New User() With { _
121: .Login = login, _
122: .FullName = fullName, _
123: .Email = email, _
124: .Description = description _
125: }
126:
127: ' add user to model, then commit changes
128: If ModelState.IsValid Then
129: db.Users.AddObject(user)
130: rowsAffected = db.SaveChanges()
131: End If
132: End Using
133:
134: Return rowsAffected = 1
135: End Function
136:
137: Public Function DeleteUser(login As String) As Boolean
138: Dim rowsAffected As Integer = -1
139: Using db As New DeptEntities()
140: Dim found As User = db.Users.FirstOrDefault(Function(u) u.Login = login)
141: If found IsNot Nothing Then
142: db.Users.DeleteObject(found)
143: rowsAffected = db.SaveChanges()
144: End If
145: End Using
146: Return rowsAffected = 1
147: End Function