2011-08-03 10 views
1

私はWebユーザーコントロールとして開発中のショッピングカートを持っています。 ucCart.ascxは3つの異なるページに表示され、どのページに表示されるかに応じてカートの機能を変更します。顧客が注文を確認しているときに、カートアイテムの削除ボタンやカートの再計算ボタンが表示されないようにします。リピータのコントロールの可視性を切り替えるにはどうすればよいですか?

これはコードでプログラムで実行できますか?私はむしろJavaScriptを使用しないでください。私は素直にcartDelete.Visible = false;を使用しようとしましたが、それは全く好きではありません!

+1

ユーザーコントロール内のユーザーコントロールまたはボタンを非表示にしようとしていますか? –

+0

ユーザーコントロールの中にあるリピーター内のボタン。 – ComfortablyNumb

答えて

6

これらのコントロールへの参照を取得し、Set Visibleプロパティをfalseに設定する必要があります。この擬似コードのようなもの。

ShoppingCartControlVariable.FinControl( "idOfTheControlYouWantToHide")。Visible = false;

は(OnItemCreatedハンドラに気づく)あなたはこのようなリピーターを持っていると仮定すると::

<asp:Repeater ID="myrepeater" runat="server" OnItemCreated="myrepeater_ItemCreated"> 
     <HeaderTemplate> 
      <table> 
       <thead> 
        <th> 
         Link 
        </th> 
        <th> 
         Button 
        </th> 
       </thead> 
       <tbody> 
     </HeaderTemplate> 
     <ItemTemplate> 
      <tr> 
       <td> 
        <asp:HyperLink ID="link" runat="server" Text='<%#Eval("Text")%>' NavigateUrl='<%#Eval("Url")%>'></asp:HyperLink> 
       </td> 
       <td> 
        <asp:Button ID="btnDelete" runat="server" Text="Delete" /> 
       </td> 
      </tr> 
     </ItemTemplate> 
     <FooterTemplate> 
      </tbody> </table> 
     </FooterTemplate> 
    </asp:Repeater> 

あなたが/非表示にすることができますこれがどのように行われるかを証明するために、サンプルコードを追加

See this documentation

リピータ行の要素を次のように表示します。

protected void myrepeater_ItemCreated(object sender, RepeaterItemEventArgs e) 
{ 
    if (e.Item.ItemType == ListItemType.Item && (boolean_condition_that_on_which_you_will_decide_what_to_show_and_what_to_hide)) 
    { 
     e.Item.FindControl("link").Visible = false; 
    } 
} 

私はすべての行のすべてのリンク要素を隠し、単に削除ボタンを残しておきたい場合たとえば、私はこれを行うことができます。

protected void myrepeater_ItemCreated(object sender, RepeaterItemEventArgs e) 
{ 
    if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType==ListItemType.AlternatingItem) 
    { 
     e.Item.FindControl("btnDelete").Visible = false; 
    } 
} 

そしてそれは、この生成します。参考のために sample run

を私のリピータに設定したコードは次のとおりです。

List<CartItem> items = new List<CartItem>(); 
     for (int i = 0; i < 10; i++) 
     { 
      CartItem t = new CartItem(); 
      t.Text="Item " +i; 
      t.Url="http://www."+i+".com"; 
      items.Add(t); 
     } 
     myrepeater.DataSource = items; 
     myrepeater.DataBind(); 
+0

これは、リピータの外側ではうまく動作します(例えば、「確認」ボタン)。 – ComfortablyNumb

+0

@ComfortablyNumb次に、OnItemCreatedイベントを処理するだけです。私は下にサンプルプロジェクトを1分以内に投稿します。 – Icarus

0

"hide controls"という名前のこのユーザーコントロール内でパブリック関数を作成し、この関数を必要なページで呼び出すことができます。この関数はコントロールを非表示にするか、ユーザーコントロールとページでブール値のプロパティを作成できますこれをfalseに設定すると、このフラグを使用してユーザコントロール内のコントロールを非表示にすることができます。

関連する問題