Silverlight WCF RIA服务(二十六)Silverlight 客户端 7
来源:互联网 发布:米洛舍维奇 知乎 编辑:程序博客网 时间:2024/06/06 01:05
演练:编辑来自域服务的数据
当我们在域服务中添加了更新、插入或删除方法时,我们就可以在Silverlight客户端创建一个接口来让用火修改数据。EntityChangesSet对象跟踪所有的改变,并且这些改变在我们调用SubmitChanges方法时一起提交。
在这个演练中,我们将学习如何创建一个让用户修改所显示数据的接口,并且将这些修改保存到数据库。
演练
1. 打开RIAServicesExample项目。(参见 WCF RIA 服务 三)
2. 在MainPage.xaml中,更改界面让用户可以保存或拒绝DataGrid中的更改。下面的XAML添加了一个Save Changes按钮和Reject Changes按钮,以及一个更改文本框。
<GRID x:Name=
"LayoutRoot"
Background=
"White"
>
<GRID.ROWDEFINITIONS>
<ROWDEFINITION Height=
"40"
></ROWDEFINITION>
<ROWDEFINITION Height=
"*"
></ROWDEFINITION>
</GRID.ROWDEFINITIONS>
<STACKPANEL Grid.Row=
"0"
Orientation=
"Horizontal"
HorizontalAlignment=
"Center"
>
<BUTTON x:Name=
"SaveButton"
Margin=
"5"
Content=
"Save Changes"
Click=
"SaveButton_Click"
></BUTTON>
<BUTTON x:Name=
"RejectButton"
Margin=
"5"
Content=
"Reject Changes"
Click=
"RejectButton_Click"
></BUTTON>
<TEXTBLOCK x:Name=
"ChangeText"
VerticalAlignment=
"Center"
Width=
"Auto"
></TEXTBLOCK>
</STACKPANEL>
<DATAC:DATAGRID Name=
"CustomerGrid"
Grid.Row=
"1"
RowEditEnded=
"CustomerGrid_RowEditEnded"
></DATAC:DATAGRID>
</GRID>
3. 在MainPage.xaml的后台代码文件中,添加按钮的点击事件处理方法、RowEditEnded事件的处理方法、一个名为OnSubmitCompleted的回调方法,和一个处理行将发生的更改的方法。
private
void
SaveButton_Click(
object
sender, RoutedEventArgs e)
{
_customerContext.SubmitChanges(OnSubmitCompleted,
null
);
}
private
void
RejectButton_Click(
object
sender, RoutedEventArgs e)
{
_customerContext.RejectChanges();
CheckChanges();
}
private
void
CustomerGrid_RowEditEnded(
object
sender, DataGridRowEditEndedEventArgs e)
{
CheckChanges();
}
private
void
CheckChanges()
{
EntityChangeSet changeSet = _customerContext.EntityContainer.GetChanges();
ChangeText.Text = changeSet.ToString();
bool
hasChanges = _customerContext.HasChanges;
SaveButton.IsEnabled = hasChanges;
RejectButton.IsEnabled = hasChanges;
}
private
void
OnSubmitCompleted(SubmitOperation so)
{
if
(so.HasError)
{
MessageBox.Show(
string
.Format(
"Submit Failed: {0}"
, so.Error.Message));
so.MarkErrorAsHandled();
}
CheckChanges();
}
为要更改的实体设置元数据
1. 在服务端项目中,为Customer实体手动添加一个名为Customer.metadata.cs的元数据类。
2. 在元数据类中,对CustomerID和ModifiedData成员属性添加EditableAttribute属性并设置AllowEdit属性为false。我们对成员属性应用EditableAttribute来指定是否想让这个成员属性在客户端让用户编辑。当我们将AllowEdit为false时,这个成员属性在客户端是只读的。在这个例子中,我们只想显示CustomeId和ModifiedDate成员属性而不想用户修改它们。
3. 添加ExcludeAttribute属性给PasswordHash,PasswordSalt和rowguid成员属性。我们对不想包含客户端生成代码中的成员属性使用ExcludeAttribute。在这个例子中,我们没有必要把PasswordHash,PasswordSalt和rowguid成员属性向客户端公开。
[MetadataTypeAttribute(
typeof
(Customer.CustomerMetadata))]
public
partial
class
Customer
{
internal
sealed
class
CustomerMetadata
{
// Metadata classes are not meant to be instantiated.
private
CustomerMetadata()
{
}
[Editable(
false
)]
public
int
CustomerID;
[Editable(
false
)]
public
DateTime ModifiedDate;
[Exclude]
public
string
PasswordHash;
[Exclude]
public
string
PasswordSalt;
[Exclude]
public
Guid rowguid;
}
}
4. 用using添加所需的命名空间,例如 System.ComponentModel.DataAnnotations和System.Web.DomainServices.
5. 运行应用程序。
注意我们可以在DataGrid中编辑值了。当我们离开所编辑的行时,ChangeText的值将会变为行将发生的更改的描述。当我们点击Save Changes按钮时,数据更改将会保存到数据库中。当点击Reject Changes按钮时,所有的行将发生的更改将恢复原样。
- Silverlight WCF RIA服务(二十六)Silverlight 客户端 7
- WCF RIA 服务 (二十六)-- Silverlight 客户端 7
- WCF RIA 服务 (二十六)-- Silverlight 客户端 7
- Silverlight WCF RIA服务(二十)Silverlight 客户端
- Silverlight WCF RIA服务(二十一)Silverlight 客户端 2
- Silverlight WCF RIA服务(二十二)Silverlight 客户端 3
- Silverlight WCF RIA服务(二十三)Silverlight 客户端 4
- Silverlight WCF RIA服务(二十四)Silverlight 客户端 5
- Silverlight WCF RIA服务(二十五)Silverlight 客户端 6
- Silverlight WCF RIA服务(二十七)Silverlight 客户端 8
- Silverlight WCF RIA服务(二十八)Silverlight 客户端 9
- Silverlight WCF RIA服务(二十九)Silverlight 客户端 10
- Silverlight WCF RIA服务(二十)Silverlight 客户端
- Silverlight WCF RIA服务(二十一)Silverlight 客户端 2
- Silverlight WCF RIA服务(二十二)Silverlight 客户端 3
- Silverlight WCF RIA服务(二十三)Silverlight 客户端 4
- Silverlight WCF RIA服务(二十四)Silverlight 客户端 5
- WCF RIA 服务 (二十)-- Silverlight 客户端
- 图像列表绘图
- 2012年50款最佳iPhone应用
- Hibernate映射解析---继承映射
- Silverlight WCF RIA服务(二十五)Silverlight 客户端 6
- ThreadPoolExecutor线程池
- Silverlight WCF RIA服务(二十六)Silverlight 客户端 7
- ffmpeg 编码h264 profile如何设置为baseline的问题
- Hibernate映射解析——七种映射关系
- java.sql.SQLSyntaxErrorException: ORA-01747: user.table.column, table.column
- Silverlight WCF RIA服务(二十七)Silverlight 客户端 8
- QQ空间手机版的十件不为人知的事
- Hibernate主键生成策略归纳
- cannot open clipboard 解决办法
- Silverlight WCF RIA服务(二十八)Silverlight 客户端 9