gpt4 book ai didi

c# - 在 ASP.NET formview 上,什么时候引发 ModeChanged 和 ModeChanging 事件?

转载 作者:行者123 更新时间:2023-11-30 17:03:31 24 4
gpt4 key购买 nike

当我试图找出为什么当我调用 formview 的 ChangeMode 事件时没有调用 OnModeChanging 处理程序时,出现了这个问题。

关于窗体 View 的ChangeMode 方法 MSDN page ,据说它:

switches the FormView control to the specified data-entry mode

还有:

the ModeChanged and ModeChanging events are not raised when this method is called

并且在 ModeChangedModeChanging 事件中 pages ,它说它们发生了:

when the FormView control switches between edit, insert, and read-only mode

分别在模式改变之后/之前。

你能给我解释一下吗:什么时候引发 ModeChanged/ing 事件?

还有,有没有办法强制引发这些事件?

最佳答案

我想我现在知道为什么了。我在其他 forum 中找到了答案,虽然我没有找到 FormView 的代码,但我找到了 DetailsView 的实现,我认为在这种情况下它可能是相似的。

基本上我所理解的是,当单击命令按钮(取消、编辑、插入、新建和更新)时会引发 ModeChanged/ing 事件,即当人们无法直接控制这些事件时,并且当我们使用 ChangeMode 方法时,我们知道模式已经改变(或将要改变)并且引发​​事件没有任何意义。

DetailsView ChangeMode:

public void ChangeMode(DetailsViewMode newMode) {
Mode = newMode;
}

DetailsView 命令处理程序:

private void HandleCancel() {
bool isBoundToDataSourceControl = IsBoundUsingDataSourceID;

DetailsViewModeEventArgs e = new DetailsViewModeEventArgs(DefaultMode, true);
OnModeChanging(e);

if (e.Cancel) {
return;
}

if (isBoundToDataSourceControl) {
Mode = e.NewMode;
OnModeChanged(EventArgs.Empty);
}

RequiresDataBinding = true;
}



private void HandleEdit() {
if (PageIndex < 0) {
return;
}

DetailsViewModeEventArgs e = new DetailsViewModeEventArgs(DetailsViewMode.Edit, false);
OnModeChanging(e);

if (e.Cancel) {
return;
}

if (IsBoundUsingDataSourceID) {
Mode = e.NewMode;
OnModeChanged(EventArgs.Empty);
}

RequiresDataBinding = true;
}

private bool HandleInsertCallback(int affectedRows, Exception ex) {
DetailsViewInsertedEventArgs dea = new DetailsViewInsertedEventArgs(affectedRows, ex);
dea.SetValues(_insertValues);
OnItemInserted(dea);

_insertValues = null;
if (ex != null && !dea.ExceptionHandled) {
if (PageIsValidAfterModelException()) {
return false;
}
dea.KeepInInsertMode = true;
}

if (!dea.KeepInInsertMode) {
DetailsViewModeEventArgs eMode = new DetailsViewModeEventArgs(DefaultMode, false);
OnModeChanging(eMode);
if (!eMode.Cancel) {
Mode = eMode.NewMode;
OnModeChanged(EventArgs.Empty);
RequiresDataBinding = true;
}
}
return true;
}

private void HandleNew() {
DetailsViewModeEventArgs e = new DetailsViewModeEventArgs(DetailsViewMode.Insert, false);
OnModeChanging(e);

if (e.Cancel) {
return;
}

if (IsBoundUsingDataSourceID) {
Mode = e.NewMode;
OnModeChanged(EventArgs.Empty);
}

RequiresDataBinding = true;
}


private bool HandleUpdateCallback(int affectedRows, Exception ex) {
DetailsViewUpdatedEventArgs dea = new DetailsViewUpdatedEventArgs(affectedRows, ex);
dea.SetOldValues(_updateOldValues);
dea.SetNewValues(_updateNewValues);
dea.SetKeys(_updateKeys);

OnItemUpdated(dea);

_updateKeys = null;
_updateOldValues = null;
_updateNewValues = null;

if (ex != null && !dea.ExceptionHandled) {
if (PageIsValidAfterModelException()) {
return false;
}
dea.KeepInEditMode = true;
}

if (!dea.KeepInEditMode) {
DetailsViewModeEventArgs eMode = new DetailsViewModeEventArgs(DefaultMode, false);
OnModeChanging(eMode);
if (!eMode.Cancel) {
Mode = eMode.NewMode;
OnModeChanged(EventArgs.Empty);
RequiresDataBinding = true;
}
}
return true;
}

关于c# - 在 ASP.NET formview 上,什么时候引发 ModeChanged 和 ModeChanging 事件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18485186/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com