Как обновить открытую панель расширения всплывающих окон - PullRequest
2 голосов
/ 08 августа 2011

У меня есть вид сетки, где у меня есть кнопка для каждой строки. После нажатия этой кнопки открывается панель модального всплывающего окна (с PanelName.Show ()). Панель содержит пользовательский элемент управления, который отображает некоторые метки, текстовые поля и т. Д. с дополнительной информацией в виде формы SqlDataSource. До этого момента это работает хорошо. Но когда я нажимаю другую кнопку, панель отображается чисто, но содержимое не обновляется (в зависимости от того, какая кнопка нажата, должна отображаться некоторая подробная информация). По сути, метод SqlDataSource_Selecting вызывается только для всплывающего окна, показывающего, но не больше.

Как заставить панель обновляться (перезагружаться) после каждого PanelName.Show () ??

Заранее спасибо.

Ответы [ 2 ]

1 голос
/ 08 августа 2011

Если я правильно понимаю ваш вопрос, я думаю, что проблема заключается в том, что вам просто нужно повторно связать элементы управления с привязкой к данным после того, как пользователь нажмет кнопку, чтобы изменить выбранный элемент. Вы можете использовать [ControlName].DataBind() для этого. Имеет ли это смысл?

0 голосов
/ 18 сентября 2017

Это зависит от того, являются ли элементы управления, которые вы хотите обновить, DataBound() или нет.

Другими словами, можете ли вы принудительно перезагрузить элемент управления с помощью вызова метода DataBind(), чтобы вызватьэлемент управления для перезагрузки, с теми же или новыми данными?Большинство элементов управления с графическим интерфейсом имеют метод DataBind(), но бесполезно, если элемент управления на самом деле не использует данные для работы!

Вот почему в вашем случае ваша панель не "обновляется" новыми данными, потому что используется DataBind() на панели ничего не делает.Использование databind () для всего GridView - это отдельная история, и она должна работать.Может быть, разместить UPDATEPANEL вокруг всего участка?Если вам нужно, вы должны быть осторожны, ваши обычные правки и другие команды в строках продолжат работать.

Однако , то, что вы можете сделать, это поместить modalpopupextender внутри вашего TemplateField и, используя «трюк», вы можете удерживать почту на сервере и по-прежнему запускать всплывающую панель.

т.е.

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

Однако btnADD работает, потому что он вызывает метод Click() на стороне серверакоторый обновляет данные в вашей новой строке.Возможно, вам придется использовать небольшой jScript для передачи ROWINDEX в метод Click (), чтобы он работал с GridView.

Кстати, метод Click () в моем случае «контролирует»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!

Удачи.

...