2009-09-10 14 views
0

以下の構造を持ち、下部コントロール(DropDownList) をMainPageのコードの背後から再バインドする必要があります。メインページコードの背後にあるネストされたコントロールをバインドする方法

 
    x MainPage1 x---- Panel1 (modal popup) 
    x--------- UpdatePanel (upMailOrStatusAction, on Panel1) 
    x-------------- RadioButtonList (rblActionLevel, on UpdatePanel) 
    x-------------- SubForm1 (on Panel1) 
    x------------------- CustomControl1 (on Subform1) 
    x------------------------ DropDownList (on CustomControl1) 

これを行う正しい方法はありますか?

コントロールに「BindMailActionLookup()」というパブリックメソッドを追加しましたが、メインページからどのように呼び出すのですか?私は「現在のコンテキストに存在しない」ということを得ますか?ここで

は、サブフォームのマークアップである:ここで

<%@ Control Language="C#" AutoEventWireup="true" CodeBehind="MailAddSubform.ascx.cs" 
Inherits="Company.Solutions.Web.Controls.MailAddSubform" %> 

<%@ Register TagPrefix="st" TagName="MailActionLookup" Src="~/Controls/StMailActionLookup.ascx" %> 
<div class="NinetyNinePercentWide"> 
    <div class="NinetyNinePercentWide EightPixelBottomMargin"> 
     <div class="RowHeader" style="padding-top: 20px;"> 
      <span class="labelfield" >Action:</span> 
     </div> 
     <div> 
      <st:MailActionLookup ID="mailActionLookup" runat="server" /> 
     </div> 
    </div> 
    <div class="NinetyNinePercentWide EightPixelBottomMargin" > 
     <br class="NinetyNinePercentWide" Text="&nbsp" /> 
     <div class="RowHeader" > 
      <span class="labelfield" >Message:</span>  
     </div> 
     <div class="TwelvePixelLeftPad" > 
      <asp:TextBox ID="txtMailActionMessage" runat="server" MaxLength="40" /> 
     </div> 
    </div> 
</div> 

は、カスタムコントロールのためのマークアップです:

<%@ Control Language="C#" AutoEventWireup="true"  CodeBehind="StMailActionLookup.ascx.cs"  Inherits="Company.Solutions.Web.Controls.StMailActionLookup" %> 


<div id="mainControlContainer" style="width:99%; padding:8px;"> 

<div id="comboContainer" style="float:left; padding-top:12px;padding-left:5px; padding- right:5px; padding-bottom:3px;"> 
    <asp:UpdatePanel runat="server" ID="mailActionUpdater"> 
    <Triggers> 
     <asp:AsyncPostBackTrigger ControlID="chkForms" EventName="CheckedChanged" /> 
     <asp:AsyncPostBackTrigger ControlID="chkRequested" EventName="CheckedChanged" /> 
     <asp:AsyncPostBackTrigger ControlID="chkOther" EventName="CheckedChanged" /> 
    </Triggers> 
    <ContentTemplate> 
     <asp:DropDownList runat="server" ID="ddlLookup" width="240px" ondatabound="ddlLookup_DataBound1" /> 
    </ContentTemplate> 
    </asp:UpdatePanel> 


</div> 

<div id="filterContainer" style="text-align:left;padding-left:6px;width:275px"> 
    <fieldset style="width:260px;"> 
     <legend>Filters</legend> 
     <asp:CheckBox ID="chkForms" runat="server" Text="Forms" AutoPostBack="true" /> 
     <asp:CheckBox ID="chkRequested" runat="server" Text="Requested Info" AutoPostBack="true" /> 
     <asp:CheckBox ID="chkOther" runat="server" Text="Other" AutoPostBack="true" /> 
    </fieldset> 

</div>  
</div> 

そして、ここでは、私は、パブリックメソッドを追加したところ背後にあるコードの一部です:

namespace Company.Solutions.Web.Controls 
{ 
    public partial class StMailActionLookup : System.Web.UI.UserControl 
    { 
     protected void Page_Load(object sender, EventArgs e) 
     { 
      BindForm(); 
     } 

     public void BindMailActionLookup() 
     { 
      BindForm(); 
     } 

     protected void BindForm() 
     { 
      GetActionLevel(); 
      IEnumerable actions = GetClaimMailActions(GetFilter()); 
      ddlLookup.DataSource = actions; 
      ddlLookup.DataTextField = "CodeAndDescription"; 
      ddlLookup.DataValueField = "ActionCd"; 
      ddlLookup.DataBind(); 
     } 
    } 
} 

答えて

0

私たちは "wompの"提案と私の同僚の一人のおかげで解決策を得ました。 ジャストチェーンの公衆電話を入れ子に保つ:

この背後にある主なクレーム情報コードに:

// Rebind the action code drop down to restrict to base level 
    mailAddSubform.BindMailActionLookup(); 

次に、この背後にあるサブフォームのコードで:

public void BindMailActionLookup() 
    { 
     mailActionLookup.BindMailActionLookup(); 
    } 

そして最後に、このルックアップコントロールで:

public void BindMailActionLookup() 
    { 
     BindForm(); 
    } 
1

CustomControl1の内部をコンシューマに公開しないでくださいctの方法は、メインページを呼び出すことができるCustomControl1のパブリックメソッド(おそらく "ResetDropDowns"と呼ぶ)を公開することです。

CustomControl1は独自のドロップダウンを認識しているので、誰かがメソッドを呼び出したときに簡単にコントロールを見つけて再バインドできます。

+0

これは意味があります、私はそれを試してみます。ありがとう – James

+0

私はコントロールに "BindMailActionLookup()"というパブリックメソッドを追加しましたが、メインページからどのように呼び出すのですか?私は「現在のコンテキストに存在しない」ということを得ますか? – James

+0

上記のコードを見て、メインページからBindMailActionLookup()を呼び出すにはどうすればいいですか?または私はこれに完全に間違っていますか? ありがとうございました – James

関連する問題