2009-07-20 6 views
0

私は、List Usersページを制御する1つ、Edit Usersページを制御する1つ、およびAdd Userページを制御する1つの3つのWebコントロールを持つaspxページを持っています。私はこれらの要素にアクセスする方法を発見しましたが、それは限られているようです。ここに私がやっていることです:親aspxページのWeb要素を子ascxページから有効/無効にするにはどうすればいいですか?

Protected Sub editUser(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewEditEventArgs) 
     'set selected user from gridview. 
     Dim index As Integer = e.NewEditIndex 
     Dim userId As Integer = gvListUsers.DataKeys(index).Value 
     Session.Item("SelectedUserId") = userId 

     'show edit page, hide list and add page. 
     With Page.Form.Controls(1) 
      .Controls(getControlId("loadAddUser")).Visible = False 
      .Controls(getControlId("loadEditUser")).Visible = True 
      .Controls(getControlId("loadListUser")).Visible = False 
     End With 
    End Sub 

getControlId機能は次のようになります。

Public Function getControlId(ByVal control As String) As Integer 
     Dim enumer As System.Collections.IEnumerator = Page.Form.Controls.Item(1).Controls.GetEnumerator 
     Dim i As Integer 

     For i = 0 To (Page.Form.Controls.Item(1).Controls.Count - 1) 
      If Page.Form.Controls(1).Controls.Item(i).ID = control Then 
       Return i 
      End If 
     Next 
     Return Nothing 
    End Function 

これは、ほとんどの場合で動作します。ただし、これらのWebコントロールの「有効」属性にアクセスすることはできません。これはなぜですか、その属性にどのようにアクセスできますか?

感謝:)

+0

、ページ・オブジェクト上で直接利用できる方法を使用することができます。 Page.FindControl(「loadAddUser」 ) – awe

+0

このメソッドについて頭のおかげで! – Chris

答えて

1

あなたは親のASPXページにに加入あなたのUserControlからイベントを上げることができます。あなたがコントロールを有効/無効にすることができ、親ページのイベントアクションでは、ここで

は、ユーザーコントロールのイベントの例です:考える他http://codebetter.com/blogs/brendan.tompkins/archive/2004/10/06/Easily-Raise-Events-From-ASP.NET-ASCX-User-Controls.aspx

何か:あなたがユーザーコントロールにこのコードを動かすから任意の利益を得ていますか?個々のコントロールのいずれかを自分で再利用できるのでしょうか?お互いに依存している密接に結合されたコントロールを作成しても、個々のコントロールの再利用性はあまりありません。

+0

リンクありがとうございます。とても興味深い。私はユーザーコントロールを使用しているので、親ページにコンテンツを追加して、単純にこのコードの一部を外に出してコントロール間に入れ替えることができます。 – Chris

0

Visibleは、System.Web.UI.Controlクラスが提供するプロパティーです。そのため、直接アクセスできます。 Enabledはこのクラスのプロパティではないため、Enabledプロパティにアクセスする場合は、コントロールオブジェクトをカスタムコントロールクラスの型の変数にマップする必要があります。あなたの中にユーザーコントロールをEnabledプロパティを公開する

Dim myControl As TheAddUserControl 

With Page.Form.Controls(1)  
    myControl = .Controls(getControlId("loadAddUser")) 
    myControl.Enabled = False    
    .Controls(getControlId("loadEditUser")).Visible = True    
    .Controls(getControlId("loadListUser")).Visible = False   
End With 

代わりに、独自のgetControlIdを作成する
Public Property Enabled As Boolean 
    Get 
     Return (Child1.Enabled And Child2.Enabled And Child3.Enabled) 
    End Get 
    Set(ByVal value As Boolean) 
     Child1.Enabled = value 
     Child2.Enabled = value 
     Child3.Enabled = value 
    End Set 
End Poperty 
+0

私はこのタイプのTheAddUserControlがどんなタイプであるか分かりません。 System.Web.UI.Control型ではないでしょうか?それは私の印象でした.. – Chris

+0

ユーザーコントロールにクラス名があります。これがタイプです。 Enabledプロパティをユーザーコントロールに追加しましたか?ユーザーコントロール(またはそれが継承するクラス)がEnabledのプロパティを公開していない場合、それは存在しません。プロパティのプロパティを公開し、それをユーザーコントロールの子要素のEnabledプロパティにマップする必要があります。 – awe

関連する問題