- - PR -
GridViewのコントロールのプロパティ制御について
1
投稿者 | 投稿内容 |
---|---|
|
投稿日時: 2007-10-23 17:32
【環境】ASP.NET2.0/VB2005/Webアプリ/WindowsXP(開発機)
はじめまして、ちゅぱかぶらと申します。 社命でWebアプリを作ることになった超初心者です。 ASP.NET2.0(VB2005)で簡単なWebアプリを作っています。 aspxファイルを開く時に、ログインしたユーザのロールによりButtonコントロールのEnabledプロパティをプログラムで制御しようと思っています。 Contentsに配したButtonコントロール(masterページ使用)は下記で制御できました。 Button1.Enabled = False/True ところがGridViewのItemTemplateに配したButtonコントロールは制御できませんでした。 [試行1] Button2.Enabled = False [メッセージ] 'Button2' は宣言されていません。 [試行2] Dim btn As Button = CType(GridView1.FindControl("Button2"), Button) btn.Enabled = False [メッセージ] オブジェクト参照がオブジェクト インスタンスに設定されていません。 自分ではプログラムからのオブジェクト取得がうまく出来ていないと思っているのですが、Webで調べても八方ふさがりで途方に暮れています。 こうしたらいい、あるいは目指す方向が間違えてるなどお知恵をいただけますと幸いです。 よろしくお願いいたします。 |
|
投稿日時: 2007-10-23 21:58
GridView1は複数の行を持っていてそれぞれの行にButton2があります。なので
GridView1.Rows(0).FindControl("Button2") のようになります。あとは行が出来るとき(RowCreatedイベント)で制御する方法もあります。 |
|
投稿日時: 2007-10-24 11:39
べるさま
書き込み場所を間違えた私に、ここでも返答いただきありがとうございます。 「RowCreatedイベントで制御する」というのが私の技術力ではできなかったため、 「それぞれの行にButton2が」という言葉をヒントに以下のコードを書きました。 画面を表示する際に、GridViewは1行ずつ処理しているはず。。。 考えてみれば確かにそうでした。 LoadCompleteでいいのか分かりませんが、望みの動作は達成しました。 べるさんから発想のヒントをいただけたおかげです。どうもありがとうございました! Protected Sub Page_LoadComplete(ByVal …中略 Dim ir As Integer = GridView1.Rows.Count Dim btn As Button For i As Integer = 0 To ir - 1 btn = CType(GridView1.Rows(i).FindControl("Button2"), Button) If Page.User.IsInRole("(排他したいロール名)") = True Then btn.Enabled = False Else btn.Enabled = True End If Next End Sub |
1