ASP.NET - ボタンの可視性変更詳細ビューの変更headerTemplate OnModeChangingハンドラで機能しない
-
12-12-2019 - |
質問
このマークアップを持っています:
<asp:DetailsView ID="dvDatabase" OnModeChanging="dvDatabase_ModeChanging">
<HeaderTemplate>
<asp:Button ID="btnView" runat="server" CausesValidation="False" CommandName="Cancel"
Text="View" CssClass="btn btn-primary" Visible="false" />
<asp:Button runat="server" CausesValidation="False" CommandName="Edit"
Text="Edit" CssClass="btn btn-success" ID="btnEdit" />
<asp:Button runat="server" CausesValidation="False" CommandName="Delete"
Text="Delete" CssClass="btn btn-danger" />
</HeaderTemplate>
...
.
それから私はこのc#:
を持っていますprotected void dvDatabase_ModeChanging(object sender, DetailsViewModeEventArgs e)
{
bool isEdit = DetailsViewMode.Edit == e.NewMode;
DetailsView view = (DetailsView)sender;
Button viewButton = (Button)view.FindControl("btnView");
Button editButton = (Button)view.FindControl("btnEdit");
viewButton.Visible = isEdit;
editButton.Visible = !isEdit;
}
.
私はいくつかのデバッグをしました、そしてVisible
プロパティが正しく設定されましたが、ボタンが変更されたわけではありません。私は編集ボタンを押して編集モードに入っていますが、編集ボタンはまだ表示され、ビューボタンはまだ隠されています。dvDatabase.FindControl
変数を使用するのではなく、object sender
を介して直接ボタンを見つけようとしましたが、どちらも機能しません。マークアップのID
属性に基づいて変数を持つボタンを参照しようとしましたが、btnView
とbtnEdit
変数/プロパティが存在しません。何が起こっているの?
編集:私はティムの提案に従ってOnModeChanged
に切り替えましたが、ボタンはまだ変わりません。これが今私のC#です:
protected void dvDatabase_ModeChanged(object sender, EventArgs e)
{
DetailsView view = /*(DetailsView)sender*/dvDatabase;
bool isEdit = DetailsViewMode.Edit == view.CurrentMode;
LinkButton viewButton = (LinkButton)view.FindControl("btnView");
LinkButton editButton = (LinkButton)view.FindControl("btnEdit");
viewButton.Visible = isEdit;
editButton.Visible = !isEdit;
}
.
object sender
クラス変数と同様にdvDatabase
クラス変数を使用してみましたが、効果があるように見えませんでした。
解決
DetailsView
の DataBound
代わりにイベントで、DetailsView if(!Page.IsPostback)
をDatabindIndにデータインされます。 ItemCommand
を処理する必要があります。適切な ChangeMode
メソッドメソッドとDatabind the DetailsView
protected void dvDatabase_DataBound(Object sender, EventArgs e)
{
var view = (DetailsView)sender;
var btnView = (Button)view.FindControl("btnView");
var btnEdit = (Button)view.FindControl("btnEdit");
switch (view.CurrentMode)
{
case DetailsViewMode.ReadOnly:
btnView.Visible = false;
btnEdit.Visible = true;
break;
case DetailsViewMode.Edit:
btnView.Visible = true;
btnEdit.Visible = false;
break;
case DetailsViewMode.Insert:
btnView.Visible = false;
btnEdit.Visible = false;
break;
default:
break;
}
}
. 所属していません StackOverflow