在DataSource中添加WHERE子句参数时,您可以通过选择“Source:Control”然后从下一个下拉列表中选择“ControlID”来指定现有的表单控件(文本框,下拉列表等)。
是否有某种方法可以配置用户控件,使其显示在“控件”列表中?
OR
如何将用户控件的属性用作查询参数?
答案 0 :(得分:2)
我不确定您是否可以使用System.Web.UI.UserControl
执行此操作,但我可以使用System.Web.UI.WebControls.WebControl
执行此操作。
您必须将WebControl类标记为[ControlValueProperty("PropertyName")]
。
PropertyName 是将在where子句中使用其值的属性的名称。例如,在TextBox的情况下,它是“Text”,在DropDownList的情况下,它是“SelectedValue”
我尝试使用UserControl执行此操作但无法使其正常工作,如果找到解决方案,会通知您。
答案 1 :(得分:0)
您的控件需要实现IPostBackDataHandler接口,以便在您的页面回发时它可以将所选索引或值“报告”到服务器。该接口由TextBox和DropDownList实现。我不确定Visual Studio diaolg是否使用它来确定是否在Controls列表中显示它,但值得一试。我仍然在研究它是如何工作的,但我想我会发布这个来让你研究它。
答案 2 :(得分:0)
您可以像这样创建自定义参数 http://fredrik.nsquared2.com/viewpost.aspx?PostID=355
但可能更容易做到以下几点:
我们向数据源添加一个选择事件,该事件将从用户控件检索公共属性并将其设置为参数。用户控件的公共属性检索某些Web控件的值,如文本框,并将其作为属性公开。
给出以下SqlDataSource
<asp:sqlDataSource ID="EmployeeDetailsSqlDataSource"
SelectCommand="SELECT EmployeeID, LastName, FirstName FROM Employees WHERE EmployeeID = @EmpID"
<SelectParameters>
<asp:Parameter Name="EmpID" Type="Int32" DefaultValue="0" />
</SelectParameters>
</asp:sqlDataSource>
我们添加一个像这样的选择事件
protected void EmployeeDetailsSqlDataSource_Selecting(object sender, SqlDataSourceSelectingEventArgs e)
{
e.Command.Parameters["@EmpID"].Value = MyUserControl.EmpID;
}
UserControl具有如下属性:
public int EmployeeID {
get {
return Convert.ToInt32(TextBox1.Text);
}
}
TextBox1是用户输入employeeID的位置。您还可以使用ViewState存储EmployeeId属性,以防您希望在回发期间保持不变(取决于您的方案)。