Как настроить таргетинг на GridViewRow с помощью набора инструментов AJAX.Net PopupExtender? - PullRequest
1 голос
/ 19 февраля 2010

У меня много данных для отображения в GridView.Поскольку в каждой строке содержится так много информации, я хотел бы иметь возможность отображать дополнительную информацию, когда пользователь нажимает на строку, поэтому я подумал, что PopupExtender из набора инструментов AJAX будет идеальным.

В идеале, я хочувсплывающее окно, отображаемое при выборе любого элемента управления в строке.Мне удалось успешно присоединить PopupExtender к одному элементу управления в строке, но я не могу заставить всплывающее окно присоединиться к самой строке.

Я бы подумал, что установка PopupExtender TargetControlId для ClientID строки в событии RowDataBound будет работать, но когда я делаю это, я получаю ошибку времени выполнения:

TargetControlID of 'popupExtId' is not valid. 
A control with ID 'gvList_ctl02' could not be found.

Я заметил, что GridViewRow отображается, элемент tr не включает в себя идентификатор,поэтому я также попытался расширить элемент управления GridView, чтобы переопределить метод CreateRow для визуализации идентификатора - с помощью этого метода я смог отобразить идентификатор строки (например, gvList_ctl02), но та же ошибка во время выполнения была выдана, когда я добавил PopupExtender обратно вкод.

Я также попытался связать команду showPopup () javascript с событием строки onclick, чтобы всплывающее окно отображалось вручную;хотя событие click зарегистрировано OK и определенно инициировано, всплывающее окно все еще не отображается.

Кто-нибудь знает, как / можно ли связать PopupExtender с GridViewRow?

Мой код привязки строки следующий:

protected void gvList_RowDataBound(object sender, GridViewRowEventArgs e)
{
 if (e.Row.RowType == DataControlRowType.DataRow)
 {
  // Bind the popup extender's target ID to the row ID
  // This will cause a runtime error
  PopupControlExtender pop = e.Row.FindControl("popupExtId") as PopupControlExtender;
  pop.TargetControlID = e.Row.ClientID;

  // Also bind the client side click handler to try to get the popup to show
  // The alert is triggered and no javascript error is generated, but the popup does not display
  e.Row.Attributes.Add("onclick", "alert('Row Clicked'); $find('" + pop.BehaviorID + "').showPopup();");
 }
}

Большое спасибо.

1 Ответ

0 голосов
/ 19 февраля 2010

Если вы не против использования ajax ModalPopupExtender, я использую немного javascript и несколько хитрых скрытых нажатий кнопок, чтобы запустить модальные всплывающие окна из сетки. Обычно я устанавливаю целевой элемент управления моего модального всплывающего окна как скрытую кнопку, а затем через javascript запускаю событие щелчка скрытой кнопки, чтобы показать модальное всплывающее окно.

Вот мое модальное всплывающее окно и скрытая разметка кнопок.

   <asp:Button ID="hiddenButton" runat="server" Text="" style="display:none"></asp:Button>
    <ajaxToolkit:ModalPopupExtender ID="ModalPopupExtender2" runat="server" 
    TargetControlID="hiddenButton" PopupControlID="Panel1" CancelControlID="CancelButton"
    BackgroundCssClass="modalBackground" Drag="True"/>

Вот мой JavaScript, чтобы показать мое всплывающее окно.

      function showModal(btnID) {
            btn = document.getElementById(btnID);
            btn.click();
            }

В моем событии, связанном с строкой, я вызываю функцию javascript showModal из события onclick кнопки.

Button myButton = (Button)e.Row.Cells[9].Controls[1];
            matchButton.Attributes.Add("onclick", "showModal('" + hiddenButton.ClientID + "');");

Надеюсь, это поможет вам направить вас в правильном направлении.

...