ASP.NET用户控件,数据绑定DataTable

时间:2009-07-09 20:23:35

标签: asp.net data-binding user-controls

我有一个包含表单的用户控件。在包含用户控件的页面上,当用户按下按钮时,我需要在用户控件中填充表单。

继承人我是怎么做到的,但它不起作用:

用户控制:

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;

单击按钮,没有任何反应。我在这里缺少什么?

提前致谢。


更新:

我离得更近了。这是因为我正在使用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 个答案:

答案 0 :(得分:0)

用户控件并不像这样复杂。它们是一个简单的问题,可以提取一些可重复使用的标记部分,然后可能会添加一些属性,方法和事件。它们并不意味着要进行数据绑定。你真的应该将tihs控件重写为复合服务器控件。

也就是说,你可能通过表现得像是一个真正的服务器控件来获得最大的牵引力。绑定到数据将发生在DataBinding事件中。在这种情况下,您应该设置网格的DataSource属性,然后在网格上调用DataBind。

答案 1 :(得分:0)

  1. 你在控件上使用Caching吗?如果使用ASP.NET控件缓存机制缓存控件的内容,则控件的文本将不会发生更改。

  2. 您可以在私有void UpdateForm(DataTable dt)中添加断点,以确保在单击按钮时调用此函数吗?

  3. 根据用户控件包含的内容,您可能需要执行EditUserControl.DataBind();

  4. 如果您发送javascript代码(jquery)作为更新面板异步回发的一部分,请务必记住浏览器不会评估javascript。您需要在异步回发后找到另一种方法来运行该代码。

  5. 此外,当您在UpdatePanel控件上执行异步回发时,该控件中的所有DOM元素都会被新元素删除并替换。必须重新创建jQuery元素。