使用用户控件中的对象代码作为Sharepoint 2010 web部件中新对象的模板的任何方法

本文关键字:对象 新对象 任何 方法 2010 控件 用户 代码 Sharepoint web | 更新日期: 2023-09-27 18:12:15

我想做老师说不能做的事;我想证明他是错的。

在我的SharePoint 2010 webpart的CreateChildControls方法中,我引用了一个名为"ChartUserControl"的用户控制文件。ascx"在我的项目中包含ASP。. NET代码的WebChartControl对象配置只是我想要的方式。WebChartControl的ID是"OrderQtyChart"。

我想做的是从UserControl中获取代码,并使用它创建一个新的WebChartControl,称为"chart",具有匹配的配置。我试图这样做,因为有回调等需要在图表上执行后,它被创建,以实际填充它与图表的东西。

所以,我的代码:
WebChartControl chart;
protected override void CreateChildControls()
{
    ChartUserControl userControl = new ChartUserControl(); 
    // referencing file ChartUserControl.ascx as an object
    chart = userControl.FindControl("OrderQtyChart") as WebChartControl; 
    // or
    chart = (WebChartControl)userControl.FindControl("OrderQtyChart"); 
    // Trying to tell the code to create 'chart' using the code defined in object 
       "OrderQtyChart" located in ChartUserControl.ascx
}

或者类似的东西。在上面的任何一个实例中,'chart'都将返回null。

我试图使用OrderQtyChart的前端代码作为'图表'的模板;它们都是相同类型的对象,我没有得到任何错误,直到我尝试在我的页面上创建'chart',这时我被告知它是空的。

有办法做到这一点吗?这将节省我大量的时间,而不必在创建时完全配置"图表"。即使我必须以不同的方式引用OrderQtyChart的前端代码。

谢谢。

使用用户控件中的对象代码作为Sharepoint 2010 web部件中新对象的模板的任何方法

你想做的事情似乎很有可能,我认为你的老师没有正确理解你的问题。这里有一些关于如何做到这一点的提示:

  1. Object A可能是其中之一:

    1. 标签或文本框等可视控件。在这种情况下,你必须通过执行direct parent.FindControl("ObjectA");
    2. 将视觉控件从父级遍历到子级
    3. 是一个类的实例。这可能是一个MyClass或由代码创建的新文本框。在这种情况下,你必须创建一个公共属性,它有一个返回ObjectA的getter。不过,如果ObjectA是在运行时动态创建和添加的UI组件,则可以使用FindControl。否则,你必须坚持使用property。
  2. FindControl不会遍历父到子层次结构,因此您必须执行递归方法才能成功找到ObjectA,或者如果您可以访问其直接父级,则调用FindControl。更多信息在这里:http://geekswithblogs.net/QuandaryPhase/archive/2009/05/06/asp.net-recursive-findcontrol-amp-extension-methods.aspx

  3. 页面生命周期在这里起着重要的作用,所以一定要记住它,否则你最终会得到一个null引用,而不是真正由FindControl

  4. 引起的。

算了。我意识到我可以直接调用用户控件,我严重地使它过于复杂了。

这是一个全新的问题,所以我将开始一个不同的主题。