ASP.net 带有数据源的用户控件
ASP.net user control with DataSource
我的用户控件有几个组件,但主要是一个 CheckBoxList,我想从页面用 SqlDataSource 加载它,允许我将我的控件的多个实例用于不同的来源。
我的第一次尝试是在我的用户控件中公开复选框列表的 DataSourceID:
public String DataSourceID
{
get { return myCheckList.DataSourceID; }
set { myCheckList.DataSourceID = value; }
}
然后从我的 aspx 中设置它,就像我对任何其他控件所做的那样:
<asp:SqlDataSource ID="sdsTest" .... ></asp:SqlDataSource>
<uc1:MyControl ID="controlTest" runat="server" DataSourceID="sdsTest" .. />
没用!...所以,在互联网上找到(并尝试过)以下...
public String DataSourceID { get; set; }
protected void Page_Load(object sender, EventArgs e)
{
if ((this.DataSourceID ?? "") != "")
{
SqlDataSource datasource = Utils.FindControl(Page, this.DataSourceID) as SqlDataSource;
if (datasource != null)
{
myCheckList.DataSource = datasource;
myCheckList.DataBind();
}
}
}
即使找到 SqlDataSource 并执行 DataBind(),我的复选框列表仍未加载。我是否漏掉了一些明显的东西?
提前致谢!
好吧,睡了一觉后,我发现了问题,完全是我的错,我只是 post 正确的代码,以防万一有人需要做类似的东西...
所以,问题是,我的 sqldatasource 需要一个参数,我可以发誓我从一开始就将它声明为 Session 参数,但是...我没有,我将它声明为 SIMPLE 参数(如我没有给它一个值,sqldatasource 正在取消 select,因为 variable/parameter。
最后,是的,只需公开 Checkboxlist 的 DataSourceID 属性 就足够了!
在用户控件中
public string DataSourceID
{
get { return cbxOptions.DataSourceID; }
set { cbxOptions.DataSourceID = value; }
}
在 aspx 中
<uc1:MyControl ID="MyControl1" runat="server" DataSourceID="sdsTest" ... />
<asp:SqlDataSource ID="sdsTest" runat="server"
ConnectionString="..." SelectCommand="select [field]
from [table] (nolock)
where customerid= @customerid">
<SelectParameters>
<asp:SessionParameter DbType="Int32" Name="customerid" SessionField="CustomerID" />
</SelectParameters>
我的用户控件有几个组件,但主要是一个 CheckBoxList,我想从页面用 SqlDataSource 加载它,允许我将我的控件的多个实例用于不同的来源。
我的第一次尝试是在我的用户控件中公开复选框列表的 DataSourceID:
public String DataSourceID
{
get { return myCheckList.DataSourceID; }
set { myCheckList.DataSourceID = value; }
}
然后从我的 aspx 中设置它,就像我对任何其他控件所做的那样:
<asp:SqlDataSource ID="sdsTest" .... ></asp:SqlDataSource>
<uc1:MyControl ID="controlTest" runat="server" DataSourceID="sdsTest" .. />
没用!...所以,在互联网上找到(并尝试过)以下...
public String DataSourceID { get; set; }
protected void Page_Load(object sender, EventArgs e)
{
if ((this.DataSourceID ?? "") != "")
{
SqlDataSource datasource = Utils.FindControl(Page, this.DataSourceID) as SqlDataSource;
if (datasource != null)
{
myCheckList.DataSource = datasource;
myCheckList.DataBind();
}
}
}
即使找到 SqlDataSource 并执行 DataBind(),我的复选框列表仍未加载。我是否漏掉了一些明显的东西?
提前致谢!
好吧,睡了一觉后,我发现了问题,完全是我的错,我只是 post 正确的代码,以防万一有人需要做类似的东西...
所以,问题是,我的 sqldatasource 需要一个参数,我可以发誓我从一开始就将它声明为 Session 参数,但是...我没有,我将它声明为 SIMPLE 参数(如我没有给它一个值,sqldatasource 正在取消 select,因为 variable/parameter。
最后,是的,只需公开 Checkboxlist 的 DataSourceID 属性 就足够了!
在用户控件中
public string DataSourceID
{
get { return cbxOptions.DataSourceID; }
set { cbxOptions.DataSourceID = value; }
}
在 aspx 中
<uc1:MyControl ID="MyControl1" runat="server" DataSourceID="sdsTest" ... />
<asp:SqlDataSource ID="sdsTest" runat="server"
ConnectionString="..." SelectCommand="select [field]
from [table] (nolock)
where customerid= @customerid">
<SelectParameters>
<asp:SessionParameter DbType="Int32" Name="customerid" SessionField="CustomerID" />
</SelectParameters>