Как редактировать сетку внутри модального всплывающего окна?

У меня есть gridview, который появляется в модальном всплывающем окне, которое создается динамически и привязано к динамически сгенерированному SqlDataSource.

Я сделал это, чтобы, надеюсь, воспользоваться возможностями автоматического редактирования gridview.

Моя проблема в том, что при нажатии кнопки редактирования модальное всплывающее окно закрывается из-за полной обратной передачи, несмотря на то, что мой gridview находится на панели обновления ...

Я просмотрел решения здесь и здесь, но ни один из них не устранил проблему. Я также пробовал каждую комбинацию под солнцем в отношении позиционирования ModalPopupExtender по отношению к панели обновлений и т. Д., А также пытался изменить UpdateMode на условный.

Разметка:

<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>

Отложенный код:

    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()

person personaelit    schedule 01.12.2010    source источник
comment
Вау, на это все еще нет ответа? У меня точно такая же проблема!   -  person Jamie    schedule 27.10.2011


Ответы (1)


По моему опыту, ModalPopupExtender всегда будет закрываться при обратной передаче, если вы явно не попросите его не делать этого в событии, вызванном обратной передачей:

    btnSubmitRequest_ModalPopupExtender.Show();
person Marcie    schedule 01.12.2010
comment
Я не совсем понимаю, что вы имеете ввиду. Я попытался подключиться к команде rowcommand gridview и вызвал там mpLabels.Show, но он не сработал, поскольку сработала обратная передача, я думаю, потому что сначала сработала обратная передача, а источник данных был повторно привязан, когда это произошло. Кроме того, поскольку gridview находится на панели обновления, должна происходить только частичная обратная передача, которая должна предотвратить исчезновение модального всплывающего окна. - person personaelit; 01.12.2010