2010-12-01 5 views
2

J'ai un gridview qui apparaît dans un popup modal qui est généré dynamiquement et est lié à un SqlDataSource généré dynamiquement.Comment modifier un gridview dans un popup modal?

Je l'ai fait pour profiter des capacités d'édition automatique du gridview.

Mon problème est que lorsque le bouton d'édition est cliqué sur le ModalPopup ferme en raison d'un postback complet malgré le fait que mon gridview est dans un panneau de mise à jour ...

Je regardai des solutions here et here mais ni fixé le problème. J'ai également essayé toutes les combinaisons sous le soleil en ce qui concerne le positionnement de ModalPopupExtender par rapport au panneau de mise à jour etc., et j'ai aussi essayé de changer le mode de mise à jour en conditionnel.

Markup:

<span class="none"><asp:Button ID="btnDummy" runat="server" Text="Dummy" /></span> 
<ajax:ModalPopupExtender ID="mpLabel" runat="server" TargetControlID="btnDummy" BackgroundCssClass="modalBackground" PopupControlID="pnlLabels"></ajax:ModalPopupExtender> 
<asp:Panel ID="pnlLabels" DefaultButton="btnOk" Style="display:none;" runat="server">  
<div style="background-color:#fff;border:1px solid black;padding:7px;">     
<asp:UpdatePanel ID="upLabels" runat="server" ChildrenAsTriggers="true" EnableViewState="true" UpdateMode="Always"> 
    <ContentTemplate> 
       <asp:Panel ID="pnlGv" runat="server" style="max-height:420px;width:700px;border-bottom:1px #ccc solid;" ScrollBars="Vertical"> 
        <asp:PlaceHolder ID="phLabelInfo" runat="server"></asp:PlaceHolder>      
        <asp:PlaceHolder ID="phSDS" runat="server"></asp:PlaceHolder>  
       </asp:Panel>         
    </ContentTemplate>   
</asp:UpdatePanel> 
<asp:Button ID="btnOk" runat="server" Text="Ok" /> 
</div> 
</asp:Panel> 

code Derrière:

Dim sdsLabels As New SqlDataSource 
    sdsLabels.ID = "sdsLabels" 
    sdsLabels.ConnectionString = System.Configuration.ConfigurationManager.AppSettings.Get("Generic Connection String") 
    sdsLabels.ProviderName = "System.Data.SqlClient" 
    sdsLabels.DeleteCommand = "DELETE FROM [JS_LABELS] WHERE [LABELID] = @LabelId" 
    sdsLabels.SelectCommand = "SELECT [LABELID], [CIRCUITNUMBER], [PANELNUMBER], [ADDITIONAL1], [ADDITIONAL2], [ADDITIONAL3] FROM [JS_LABELS] WHERE [QUOTEITEMID] = @QuoteItemId" 
    sdsLabels.UpdateCommand = "UPDATE [JS_LABELS] SET [CIRCUITNUMBER] = @CircuitNumber, [PANELNUMBER] = @PanelNumber, [ADDITIONAL1] = @Additional1, [ADDITIONAL2] = @Additional2, [ADDITIONAL3] = @Additional3 WHERE [LABELID] = @LABELID" 
    sdsLabels.SelectParameters.Add(New Parameter("QuoteItemId", Data.DbType.Int32, e.CommandArgument.ToString())) 
    sdsLabels.DeleteParameters.Add(New Parameter("LabelId", Data.DbType.Int32)) 

    Dim paramCollection As New ParameterCollection 
    paramCollection.Add("CircuitNumber", Data.DbType.String, "") 
    paramCollection.Add("PanelNumber", Data.DbType.String, "") 
    paramCollection.Add("Additional1", Data.DbType.String, "") 
    paramCollection.Add("Additional2", Data.DbType.String, "") 
    paramCollection.Add("Additional3", Data.DbType.String, "") 
    paramCollection.Add("LabelId", Data.DbType.Int32, "0") 


    Dim ph As New PlaceHolder 
    ph = CType(PageHelper.RecursiveFindControl(Page, "phSDS"), PlaceHolder) 
    ph.Controls.Add(sdsLabels) 

    Dim gv As New GridView 
    ph = CType(PageHelper.RecursiveFindControl(Page, "phLabelInfo"), PlaceHolder) 
    ph.Controls.Add(gv) 

    gv.CssClass = "LabelsTable" 
    Dim LabelId() As String = {"LabelId"} 
    gv.DataKeyNames = LabelId 
    gv.EnableViewState = True 
    gv.AutoGenerateEditButton = True 
    AddHandler gv.RowCommand, AddressOf gv_rowCommand 
    gv.DataSourceID = sdsLabels.ID 
    gv.DataBind() 

    mpLabel.Show() 
+0

Wow, ce n'est toujours pas répondu? J'ai le même problème! – jlg

Répondre

0

Dans mes expériences, le ModalPopupExtender aura toujours près d'un postback à moins que vous demander explicitement de ne pas en cas déclenché par la publication:

btnSubmitRequest_ModalPopupExtender.Show(); 
+0

Je ne suis pas sûr de ce que vous voulez dire. J'ai essayé d'accrocher dans la commande gridview rowcommand et appelé mpLabels.Show là mais il n'a jamais tiré pendant que la publication a renvoyé je pense parce que le postback a tiré d'abord et la source de données a été re-binded quand cela s'est produit. De plus, comme la grille est dans un panneau de mise à jour, il ne devrait y avoir qu'une publication partielle qui devrait * empêcher * la fenêtre modale de disparaître. – plntxt