2011-08-08 3 views
2

私は各行にボタンがあるグリッドビューを持っています。このボタンをクリックすると、Modal PopUp Extenderパネルが開きます(PanelName.Show())。 Panelにはユーザーコントロールがあり、ラベル、テキストボックスなどを表示します。追加情報はSqlDataSourceフォームにバインドされています。これまではうまくいきました。しかし、別のボタンをクリックすると、パネルは完全に表示されますが、コンテンツはリフレッシュされません(どのボタンがクリックされたかに基づいて、いくつかの詳細情報が表示されます)。基本的には、SqlDataSource_Selectingメソッドは、パネルポップアップが表示されたときにのみ呼び出されますが、それ以上は呼び出されません。開いているポップアップエクステンダーパネルをリフレッシュする方法

各PanelName.Show()の後にパネルを強制的にリフレッシュ(リロード)する方法はありますか?

ありがとうございます。

答えて

1

質問を正しく理解していれば、ユーザーがボタンをクリックして選択項目を変更した後に、データバインドコントロールを再度バインドするだけでよいという問題があると思います。 [ControlName].DataBind()を使ってそれを行うことができます。それは理にかなっていますか?

+0

あなたのコメントのおかげで、私はそれを試していましたが、私はPage_Loadメソッドでこのコードをunforutnatelyしていましたが、動作しませんでした - コードは実行されましたが、DataGridは再バインドされませんでした。最後に、カスタムコントロール(ポップアップページ)全体を更新パネルに入れ、その後、パネルがポップアップされるたびにページが更新/更新されるという問題を解決しました。 – Frankie

+0

よくやった!この質問のタイトルを更新して、[解決済み]の前に置いてください。 – jadarnel27

+1

@ jadarnel27:いいえ、[解決済み]をタイトルに入れません。 –

0

リフレッシュするコントロールがDataBound()であるかどうかによって異なります。

つまり、DataBind()メソッド呼び出しを使用してコントロールを強制的にリロードして、同じまたは新しいデータでコントロールを強制的にリロードすることはできますか? ほとんどのGUIコントロールにはDataBind()メソッドがありますが、コントロールが実際にデータを使用していない場合は役に立ちません!

これは、パネル上のDataBind()を使用すると何も起こらないため、パネルに新しいデータが "リフレッシュ"されない理由です。 GridView全体でdatabind()を使用することは別の話であり、うまくいくはずです。たぶんUPDATEPANELを全体の周りに配置するのでしょうか?あなたが気を付けなければならない場合は、通常の編集や行の他のコマンドは引き続き動作します。

しかし、何ができることはあなたのTemplateField内部の場所modalpopupextenderで、「トリック」を使用して、サーバーのポストバックを維持し、まだポップアップパネルを発射することができます。

<asp:UpdatePanel ID="upADDMAIN" runat="server" UpdateMode="Conditional"> 
     <ContentTemplate> 
      <asp:Button ID="btnADD" runat="server" Text="NEW LOGIN" BackColor="Blue" Font-Bold="True" ForeColor="#FFFFCC" OnClick="btnADD_Click" /> 
      <asp:Button ID="btnDUM" runat="server" style="display:none" /> 
      <div style="height:20px"> 
      </div> 
      <ajaxToolkit:ModalPopupExtender ID="mpeADD" runat="server" 
       targetcontrolid="btnDUM" 
       popupcontrolid="upADD" 
       backgroundcssclass="modelbackground">  
      </ajaxToolkit:ModalPopupExtender> 
      <asp:UpdatePanel ID="upAdd" runat="server" UpdateMode="Conditional"> 
       <ContentTemplate> 
        <asp:Panel ID="pnlADD" runat="server" Width="700px" HorizontalAlign="Center" CssClass="auto-style10" Height="200px"> 
.. 
.. 
         <div id="puFTR" class="auto-style17" style="vertical-align: middle"> 
          <asp:Button id="btnOK" runat="server" Text="OK" style="width: 80px" OnClick="btnOK_Click" /> 
          &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
          <asp:Button id="btnCAN" runat="server" Text="CANCEL" style="width: 80px" OnClick="btnCAN_Click" CausesValidation="False" /> 
         </div> 
        </asp:Panel> 
       </ContentTemplate> 
      </asp:UpdatePanel> 
     </ContentTemplate> 
    </asp:UpdatePanel> 

すなわち、ご覧の通り、btnDUM制御がMPEを動作させるためにダミーであるが、それはstyle="display:none"タグによって隠されていて、それが実際に使用されていません。

ただし、サーバー側でClick()メソッドを呼び出して新しい行のデータを更新するため、btnADDが機能します。少しのjScriptを使ってROWINDEXをClick()メソッドに渡して、GridViewで動作させる必要があるかもしれません。あなたが調整する必要がありますので、

ところで、手動MPE私の場合、「コントロール」でのクリック()メソッド...私の場合は

protected void btnADD_Click(object sender, EventArgs e) 
     { 
      ClearADDform(); 
      mpeADD.Show(); 
     } 

protected void ClearADDform() 
     { 
      txtLOGIN.Text = string.Empty; 
      cbISActive.Checked = true; 
      txtPWD.Text = string.Empty; 
      ddlAgent.SelectedIndex = -1; 
     } 

は、上記のコード例では、GridViewの外にあります。

ただし、Ajaxポップアップを使用してサーバーサイドの呼び出しを行うことは可能です。

幸運。

関連する問題