2012-03-08 15 views

答えて

0

あなたがアクセスできるあなたのUserControlにプロパティを提供することをお勧めします。例えば

public GridView UserGrid 
{ 
    get 
    { 
     return GridView1; 
    } 
} 

しかし、あなたがこれを必要とする理由の質問です。

親指の規則:可能な限り少なくしてください。そうすれば、あなたのコードは最も堅牢で読みやすいものになります。したがって、それを公開するのはではなくDataSourceです。

一方、UserControlのイベントでページを反応させる場合は、ページで処理できるカスタムイベント(例:UserDeleted)を提供する必要があります。

Page-UserControl-Commmunication

+0

@downvoter:お気軽にコメントしますか? –

0

コントロールが同じレベルでお互いについて何も、あなたはそれを得るために親ページを使用する必要があるため。このロジックを試してみてください:

  1. あなたの親ページを参照するプロパティを作成します(ページあなたのコントロールが通常である(なぜならコントロールのレイヤーの異なる場合があります)

  2. を参照するページのプロパティを作成します。グリッドがでているユーザーコントロール、または直接そのグリッドへのリンク。

page.aspx

public UserControl UserGridControl 
{ 
    get; 
    set; 
} 

userControl.ascx

public Page ParentPage 
{ 
    get; 
    set; 
} 

例コール:

は、最初のプロパティをインスタンス化。その後、次の文を使用してそのコントロールから何かにアクセスします(ここではFoo()を使ってダミーメソッドとして使用していますが、誰かにとっては不明瞭です)。

this.ParentPage.UserGridControl.Foo(); 

EDIT:それは、ページのみから行うことができるように直接コード例を持っていたいですか? Tim Schmeltersの答えを参照してください。別のユーザーコントロールからグリッドを呼び出す方法が必要な場合。私のものを使用してください。 WebUserControl1が.aspxのページ上で使用するコントロールのIDである

GridView GridView1 = (GridView)WebUserControl1.FindControl("GridView1"); 

+0

'Foo'とは何ですか?それはどこにも宣言されていない。あなたの 'ParentPage'プロパティの目的もわかりません。 OPは、このページ内のASPXページにあるUserControlのGridViewにアクセスする方法を尋ねました。だから冗長です。 –

+0

あなたは本当にもっと広い答えを批判していますか?私はOPだけでなく、別のユーザーコントロールからロードする余分な方法を与えた...それはとても悪いですか? – Rickjaah

+0

私はあなたの答えを捨てていませんが(部品は私のものからコピーされているようですが)、回答は_bad_ではありませんが、何も追加せず、OPの要件を参照していません。 –

0

はこれを試してみてください。