ASP.NET - ボタンの可視性変更詳細ビューの変更headerTemplate OnModeChangingハンドラで機能しない

StackOverflow https://stackoverflow.com//questions/10692300

質問

このマークアップを持っています:

<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属性に基づいて変数を持つボタンを参照しようとしましたが、btnViewbtnEdit変数/プロパティが存在しません。何が起こっているの?

編集:私はティムの提案に従って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;
    }
}
.

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top