【问题标题】:ASP.NET User control, databinding DataTableASP.NET 用户控件,数据绑定 DataTable
【发布时间】:2010-11-09 12:37:12
【问题描述】:

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

这是我的做法,但它不起作用:

用户控制:

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');
    });
});

我将它附加到表单中,但它不起作用。有什么想法吗?


第二次更新:

如果我从页面中删除更新面板,它会起作用。有任何想法吗? :-)

【问题讨论】:

  • 您是否为您的按钮添加了点击事件处理程序?
  • 点击按钮时页面是否回传到服务器?
  • 是的。一切都好。在页面的另一部分使用它:)

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


【解决方案1】:

用户控件并不意味着如此复杂。它们的目的是简单地提取一些可重用的标记部分,然后可能添加一些属性、方法和事件。它们不打算进行数据绑定。您确实应该将 tihs 控件重写为复合服务器控件。

也就是说,通过将其视为真正的服务器控件,您可能会从中获得最大的吸引力。数据绑定将在 DataBinding 事件中发生。在这种情况下,您应该设置网格的 DataSource 属性,然后在网格上调用 DataBind。

【讨论】:

  • 我的用户控件中没有网格。什么意思?
  • 抱歉,以为是单格。在这种情况下,您必须对各个控件进行数据绑定。
【解决方案2】:
  1. 您是否在控件上使用缓存?如果控件的内容是使用 ASP.NET 控件缓存机制进行缓存的,那么控件的文本不会发生变化。

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

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

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

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

【讨论】:

  • 另外,用户控件是否被动态加载?如果是这样,请确保它在所有回发时都被加载,并且每次加载时都保持 id 相同。如果 id 更改或控件未重新加载,则用户控件上的事件和视图状态将丢失。
  • 1.否 - 2. 是的。它被调用。 - 3. UpdateForm 从数据表中取出数据,将其“绑定”到文本框。调用 DataBind() 没有帮助。
  • UC 被简单地包括在内,例如:。如果有什么要说的话,它在 UpdatePanel 里面?
  • 好吧,如果这是一个异步回发(来自按钮),那么请确保 UpdatePanel 得到“更新”。 (见msdn.microsoft.com/en-us/library/…
猜你喜欢
  • 2011-04-27
  • 2011-02-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-03-30
  • 1970-01-01
相关资源
最近更新 更多