原回:
页面aspx里面有一个DataSet ds,且他下面的几个用户控件uc1,uc2,uc3都有用到这个ds相同的数据,所以我想要让这个ds在整个页面中使用
以下是cpp2017(幕白兄) 的方法:
方法一:添加属性
ascx:
private DataSet ds
public DataSet _ds
{
get
{
return ds;
}
set
{
ds=value;
}
}
aspx:
DataSet myds=new DataSet();
...//这里绑定myds
uc1._ds=myds
-------------------------------------------
方法二:事件委托
ascx:
public EventHandler UsbBttonClicked
aspx:
((yourUserControlType)yourUserControl).usbButtonClicked += .....
-----------------------------------------------
方法三:Eddie005(♂) №.零零伍 (♂) 好像是接口
public class BasePage : System.Web.UI.Page
{
public DataSet ds = null;
}
public class WebForm1 : BasePage
{
private void Page_Load(object sender, System.EventArgs e)
{
ds = new DataSet();
//...
}
}
public class MyWebUserControl : System.Web.UI.UserControl
{
pirvate void Button1_Click(object sender,System.EventArgs e)
{
DataSet myDs = ((BasePage)Page).ds;
this.DataGrid.DataSource = myDs;
//....
}
}
-----------------------------------------------------------------
方法一:直接,但是要对每一个ascx都要添加属性,且aspx都要进行赋值;
方法二:代码比较多,但是可以进行再处理
方法三:定义了一次后每个地方都可以使用
个人看以上三种,方法一程序效率应该最好,但二和三就不清楚
问大家这种情况的时候会用哪一种还有下以上三种的区别
个人认为,建议使用类似于方法二的做法。每一个控件加一个方法:如BindData(DataSet ds)
在调用用户控件的时候,不使用该方法就不显示相应结果。
比如:DataGrid控件,你要使用它,就必须得到datasource,然后绑定。
这种写法,对调用对象没有统一的接口要求。用户控件的普遍适用性较强。