我有一个用户控件,带有一种从数据库中获取数据的方法。我正在使用带标签的主页,需要两次显示相同的信息。有没有某种方法可以在主页上设置2个用户控件,但是只调用一次该方法并填充2个不同的控件?该方法从数据库获取数据,对于同一件事两次调用它似乎是一种浪费。
public partial class control : System.Web.UI.UserControl
{
protected void Page_Load(object sender, EventArgs e)
{
}
public void bindcontrol(int id, string pie)
{
//get info from database and bind it to a gridview
}
}
主页
<%@ Register TagPrefix="z" TagName="zz" Src="control.ascx" %>
<div role="tabpanel" class="tab-pane" id="passport">
<z:zz ID="ctrl1" runat="server" />
</div>
<div role="tabpanel" class="tab-pane" id="passport">
<z:zz ID="ctrl2" runat="server" />
</div>
//code behind - which is what I'm trying to avoid:
ctrl1.bindSummary(id, strPIE);
ctrl2.bindSummary(id, strPIE);
答案 0 :(得分:0)
您不能执行这样的封装方法。您可以对委托人执行类似的操作。如果要在特定类型的所有控件上执行方法,另一种选择是迭代选项卡页的控件,类似于:
foreach(WebControl c in MyTabPage.Controls)
{
if(c is MyControlType)
{
((MyControlType)c).PerformTask();//Cast to your type to call method on type
}
}
或更紧凑的使用linq。
foreach(WebControl control in Parent.Controls.OfType<MyControlType>)
((MyControlType)c).PerformTask();
或为每个代表使用
Parent.Controls.OfType<MyControlType>.ForEach(p => PerformTask());