代码之家  ›  专栏  ›  技术社区  ›  Curtis White

重写用户控件上的数据绑定,注意事项?

  •  0
  • Curtis White  · 技术社区  · 14 年前

    我在用户控件上有一个自定义属性,该控件有多个状态/模式。如果在父页中设置了此属性:我希望控件自动更新。在页面加载中使用属性不起作用,因为它没有启动。

    我可以想象三种方法:

    1. 在属性上,我可以添加一个代码块此.DataBind().
    2. 我可以通过重写虚拟方法DataBind来添加代码。
    3. 我可以创建一个公共专有更新方法。

        public override void DataBind()
    {
          if (SpecialMode)
           {
            .. load from database
    
           }
          base.DataBind()
        }
    

    我对订单很感兴趣基本数据绑定(). 我看到它通常放在第一位,但在我从数据库加载数据之后:我将需要databind来获取要显示的数据。

    对这些考虑的任何投入都将不胜感激。

    需要说明的是:

    此控件是一个轮询小部件。它通常会从页面加载事件中搜索并加载要显示的轮询。但是,它还有一个报告模式,允许嵌入控件的页面更改要显示的轮询Id。此属性不会在页面加载中启动。好吧,部分原因是我有一个对象的属性,还有一个ViewState的重复属性,但只有Id。

    2 回复  |  直到 14 年前
        1
  •  0
  •   Dr. Wily's Apprentice    14 年前

    您可以让用户控件在其PreRender事件中处理自动数据绑定。当Id属性发生更改(或者触发自动数据绑定的任何属性)时,可以在控件中设置一个标志,该标志稍后在PreRender中被选中,以指示需要加载数据。

    或者,您可以清除已从ViewState加载的任何数据,而不是设置标志,并在PreRender中实现逻辑,即“如果没有数据,则加载它”。

    这避免了在一个请求中多次加载数据的可能性,因为在这种情况下,碰巧有多次设置Id属性的代码。

        2
  •  0
  •   John Saunders    14 年前

    您的控件不应该以任何方式依赖于它所嵌入的页面。相反,要有一个 AutoUpdate 自动更新 属性已设置。