私はこのマークアップを持っています:
<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