使用DataSource的ASP.net用户控件

时间:2015-03-26 23:57:38

标签: c# asp.net user-controls sqldatasource

我的用户控件有几个组件,但主要是一个CheckBoxList,我想从页面加载一个SqlDataSource,允许我使用不同来源的多个控件实例。

我的第一次尝试是在我的用户控件中公开checkboxlist的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(),我的复选框列表仍未加载。我错过了一些明显的东西吗?

提前致谢!

1 个答案:

答案 0 :(得分:1)

好吧,经过一次良好的睡眠后,我发现了问题,完全是我的错,我会发布正确的代码,以防万一有人需要做类似的事情......

所以,问题是,我的sqldatasource期望一个参数,我可以发誓我从头开始将它声明为Session参数,但是......我没有,我将它声明为SIMPLE参数(如我没有给它一个值, 由于null变量/参数 ,sqldatasource正在取消选择。

最后,是的,只是公开Checkboxlist的DataSourceID属性已经足够了!

在UserControl中

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>