ASP.NET Пользовательский элемент управления, привязка данных DataTable - PullRequest
0 голосов
/ 10 июля 2009

Я получил пользовательский элемент управления, содержащий форму. На странице, содержащей пользовательский элемент управления, мне нужно заполнить форму в пользовательском элементе управления, когда пользователь нажимает кнопку.

Вот как я это сделал, и это не работает:

Контроль пользователя:

public partial class editUC : System.Web.UI.UserControl
{
    public DataTable dataTable { set { UpdateForm(value); } }

    protected void Page_Load(object sender, EventArgs e) { }

    private void UpdateForm(DataTable dt) { txtControl.Text = dt.Rows..... ... }
}

Где UpdateForm связывает различные текстовые поля.

И страница, содержащая UC, при нажатии кнопки:

EditUserControl.dataTable = dt;

При нажатии на кнопку ничего не происходит. Что мне здесь не хватает?

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


UPDATE:

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

Вот как я создаю диалог:

$(document).ready(function() {
    var dlg = $('.editFormDialog').dialog({
        autoOpen: false,
        height: 650,
        width: 550,
        modal: true,
        bgiframe: true,
        title: 'Rediger',
        open: function(type, data) {
            $(this).parent().appendTo("form");
        }
    });

    dlg.parent().appendTo("form");

    $('#btnEdit').live('click', function() {
        $('.editFormDialog').css('visibility', 'visible');
        $('.editFormDialog').dialog('open');
    });
});

Я добавляю его в форму, но он не работает. Есть идеи?


2-е обновление:

Это работает, если я удаляю панели обновления со страницы. Есть идеи? : -)

Ответы [ 2 ]

0 голосов
/ 10 июля 2009
  1. вы используете кеширование на контроле? Если содержимое элемента управления кэшируется с помощью механизма кэширования элемента управления ASP.NET, текст элемента управления не изменится.

  2. Можете ли вы добавить точку останова в закрытый void UpdateForm (DataTable dt), чтобы убедиться, что эта функция вызывается при нажатии на кнопку?

  3. В зависимости от того, что содержит пользовательский элемент управления, может потребоваться выполнить EditUserControl.DataBind ();

  4. Если вы отправляете код javascript (jquery) как часть асинхронной обратной передачи панели обновлений, важно помнить, что javascript не будет оцениваться браузером. Вам нужно найти другой метод для запуска этого кода после асинхронной обратной передачи.

Кроме того, когда вы выполняете асинхронную обратную передачу для элемента управления UpdatePanel, все элементы DOM в этом элементе управления удаляются и заменяются новыми элементами. Элементы jQuery должны быть заново созданы.

0 голосов
/ 10 июля 2009

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...