【发布时间】:2012-11-27 11:04:34
【问题描述】:
在 Silverlight 应用程序中,我使用存储过程来更新我的数据库表。
ALTER PROCEDURE [dbo].[SP_ADD_MIS_MISSION]
(
@IdMission as int,
@IdVersion as smallint,
@LibMission as varchar (50)
)
AS
BEGIN
DECLARE @IDNEWVERSION as int = 1,
@IDNEWMISSION as int = @IdMission,
@supp as bit = 1
BEGIN
IF @IdMission != 0 AND @IdMission is not NULL
BEGIN
SELECT @IDNEWVERSION = MAX(IDVERSION)+1 FROM MIS_Mission where MIS_Mission.IdMission=@IdMission
Update MIS_Mission SET Suppression = @supp WHERE MIS_Mission.IdMission=@IdMission AND MIS_Mission.IdVersion=(@IDNEWVERSION-1)
END
ELSE
BEGIN
SET @IDNEWVERSION = 1
select @IDNEWMISSION = MAX(MIS_Mission.IdMission)+1 from MIS_Mission
if @IDNEWMISSION is NULL SET @IDNEWMISSION=1
END
Insert MIS_Mission ( IdMission,
IdVersion,
LibMission,
Suppression
)
values ( @IDNEWMISSION,
@IDNEWVERSION,
@LibMission,
@Suppression
)
SELECT @IDNEWMISSION
END
我在我的 WCF RIA 服务中添加了这段代码来启动存储过程:
public void SetMission(MIS_Mission mis)
{
_entity.ADD_MIS_MISSION(mis.IdMission,mis.IdVersion,mis.LibMission);
}
我在我的 Silverlight 应用程序中添加了这段代码,以更新我的数据库,并在我的数据网格中输入值:
private void UpdateMission_Click(object sender, RoutedEventArgs e)
{
foreach(MIS_Mission mis in dG_Mission.ItemsSource)
{
var operation = _Context.SetMission(mis);
operation.Completed += (se, ev) =>
{
};
}
}
但是当我完成数据库更新时,我的上下文并没有更新 IdVersion 的新值,并且我的数据网格显示了我的任务的旧版本。
如何在不重新加载数据网格的情况下更新上下文?
【问题讨论】:
-
_Context.SetMission(mis);会触发事件吗?如果是,您需要在调用之前分配operation.Completed += (se, ev) =>。如果不是,您需要触发事件,该事件将在您附加后触发operation.Completed -
感谢您的回复。我的
operation.Completed +=似乎是这样工作的。当我尝试时,我没有问题。 -
更新后是否从数据库中检索数据?如果没有,您的应用程序可能不知道您已更新任何内容。如果您不想重新查询数据库,则需要将基础数据存储在
List<>或任何其他结构中,并在每次更新到数据库后重新绑定datagrid。另一种方法是将DataBinding与INotifyPropertyChanged的实现一起使用-使用这种方法,您的UIdatagrid将从底层结构自动更新。 -
我认为不可能使用
INotifyPropertyChanged,因为我的主键在每次更新时都会更改(idmission+idversion) -
在这种情况下,遗憾的是,您唯一的选择是在每次更新后重新查询数据库中的数据
标签: wcf c#-4.0 silverlight-4.0 wcf-ria-services