2010-12-02 8 views
2

私はgridviewを持つasp.netページを持っています。グリッドビューの特定の列は、ユーザーが特定の役割にある場合、つまりHttpContext.Current.User.IsInRole(XXX)がtrueを返す場合にのみ表示されるようにしたいと考えています。グリッドビューの列を特定の役割のユーザーにのみ表示するにはどうすればよいですか?

これを行う最も簡単な方法は何ですか?

私はこのコードをページコードビハインドではなく私のASPコードに簡単に入れることができます。

答えて

2

私は自分のサイトの1つでこの手法を使用しました。

If Roles.IsUserInRole(Profile.UserName, "This Role") Then 
    productGridview.Columns(2).Visible = False 
End If 

もちろん、この場合2は非表示にする列のインデックスを表します。

+1

私はこのようなことをしました。しかし、私はいくつかのテーブルに列を持っている(そして列は各テーブルで異なっている)ので、列は各テーブルで同じインデックスを持たないでしょう。このようなインデックスを使用せずに何らかの方法で列を参照することができれば本当にうれしいでしょう。 –

0

ここではいくつかのオプションを考えることができますが、いくつかはハックの種類です。

  1. HttpContext.Current.User.IsInRole(xxx)関数の結果にJavaScript変数を設定してから、問題のあるコントロールをjQueryで削除します。 `$(" control_type [id $ =] ")セレクタを使って同様のことをしました。
  2. FindControl("ID")関数を使用して、各グリッドから非表示にするコントロールを取得し、それぞれにVisible = falseを設定します。
  3. 2つの別個のGridView aspxページを作成します.1つはすべての列、もう1つは制限された列セットです。その後、<div>タグをプレースホルダーとして使用し、IsInRole()の結果に基づいてjQuery load()関数(適切なaspxページへの参照)を呼び出すことができます。

カラムを自動生成している場合は、使用しているクラスコンストラクタ/関数にIsInRole()の結果を渡して、そのようにカラムを非表示にすることができます。

関連する問題