0

のいくつかのアイテムコントロールを非表示にできるようにしたいFormview。特定の要件が満たされたときに、設定した、、およびリンクボタンがフォームビューに表示されないようにメソッドを定義しAddましUpdateDelete。これを実現するために使用するコードは、以下に示すものと同じです。これは、初期表示で正しく機能します。

ただし、ページングコントロールが使用されている場合、およびフォームビューに別のアイテムが表示されている場合は、リンクボタンが再び表示されます。

FormView1_PageIndexChanging次の方法で、両方のイベントと_PageIndexChangedイベントを使用してリンクボタンを再度非表示にしようとしました。

    protected void FormView1_PageIndexChanged(object sender, EventArgs e)
    {
        // Check to see if PDP requirement has been removed
        if (txtStatusMessages.Text == "PDP Required has been set to False for this User so PDP cannot be updated or signed off.")
        {
            Control lb_n = FormView1.FindControl("LinkButton_New");
            lb_n.Visible = false;
            Control lb_e = FormView1.FindControl("LinkButton_Edit");
            lb_e.Visible = false;
            Control lb_d = FormView1.FindControl("LinkButton_Delete");
            lb_d.Visible = false;
        }
    }

コントロールを非表示にするためにテキストボックスの内容をチェックするというアイデアは、理想からはほど遠いことを理解しています。ただし、この時点では、このメソッドを使用してアイテムコントロールを非表示にできることを確認したいだけです。

デバッガーを使用してこのコードを実行する場合、ページャーボタンを使用するとイベントが発生します。表示されるプロパティがtrueからfalseに正しく変更されます。ただし、リンクボタンは引き続き表示されます。

なぜこれが期待どおりに機能しないのか誰かが知っていますか?

よろしくお願いします、ゲイリー。

4

1 に答える 1

0

私は問題を解決したようです。

最初はFormView1_ModeChanging、を使用してみました。これにより、読み取り専用から編集へのモードの変更をキャンセルできました(Editたとえば、リンクボタンをクリックしたとき)。これは機能しましたが、リンクボタンがまだ表示されていることを意味しました。

この問題をもう少し調べてみると、リンクボタンの表示プロパティをfalseに設定できたものの、効果的にリセットされていることがわかりました。これにより、私の問題はイベントの順序付け(おそらく使用するのに間違った用語)が原因であり、の更新がFormview私の変更を上書きしていると思いました。

そこで、HiddenFieldユーザーがデータ項目を更新できるかどうかに基づいて設定される、編集許可タイプのデータを格納するための新しいデータを追加しました。次に、次のようにPreRenderイベントで使用しました。

    protected void FormView1_PreRender(object sender, EventArgs e)
    {
        if (hfEditAllowed.Value == "false")
        {
            Control lb_n = FormView1.FindControl("LinkButton_New");
            lb_n.Visible = false;
            Control lb_e = FormView1.FindControl("LinkButton_Edit");
            lb_e.Visible = false;
            Control lb_d = FormView1.FindControl("LinkButton_Delete");
            lb_d.Visible = false;
        }
    }

これは理想的な解決策ではないかもしれませんが、必要に応じてLinkBut​​tonの表示を管理することができます。

うまくいけば、この情報は他の誰かに役立つでしょう!ゲイリー。

于 2012-05-28T10:38:55.407 に答える