我有一个下拉列表,其中填充了SQL数据库中的数据。这就是我在aspx文件中可能拥有的内容。如何将代码从aspx文件中移动(尽可能多)到aspx.cs文件以实现代码隐藏技术? 我的意思是至少SELECT部分。 感谢。
<asp:DropDownList ID="DropDownList1" ... runat="server"/>
...
<asp:SqlDataSource ID="SqlDataSource1" runat="server"
ConnectionString="<%$ ConnectionStrings:Pubs %>"
SelectCommand="SELECT [au_id], [au_lname], [au_fname], [state] FROM [authors] WHERE [state] = @state">
<SelectParameters>
<asp:ControlParameter Name="state" ControlID="DropDownList1" PropertyName="SelectedValue" />
</SelectParameters>
</asp:SqlDataSource>
答案 0 :(得分:1)
假设您正在使用数据源SqlDataSource1
绑定网格,那么您可以在代码隐藏中捕获SelectedIndexChanged
事件并获取数据以绑定网格,如下所示:
ASPX文件:
<asp:DropDownList ID="DropDownList1" runat="server"
OnSelectedIndexChanged="ddlChanged" />
C#(codebehind):
protected void ddlChanged(object sender, EventArgs e)
{
var cs=..;//get connection string
using(var con=new SqlConnection(cs))
{
using(var com=new SqlCommand(con))
{
com.Open();
com.CommandType = CommandType.Text;
com.CommandText="SELECT [au_id], [au_lname], [au_fname], [state]
FROM [authors] WHERE [state] = @state";
var state=....;//GET VALUE OF STATE FROM DROPDOWN
var p = com.Parameters.Add("@state");//set other properties
p.Value = state;
using(var adptr=new SqlDataAdapter(com))
{
var dtb=new DataTable();
adptr.Fill(dtb);
grid.DataSource=dtb;
grid.DataBind();
}
}
}
}
答案 1 :(得分:0)
SelectCommand
是您正在使用的数据源对象的属性。这些可以根据需要应用在后面的代码中,但是您可能希望在重写的Init页面函数中执行它,因为这可能在asp.net页面生命周期中很早就使用了。例如,虽然我不确定究竟在哪里。
protected override OnInit(object sender, EventArgs e)
{
dsMySource.SelectCommand = "SELECT [au_id], [au_lname], [au_fname], [state] FROM [authors] WHERE [state] = @state"
}
您还必须确保在后面的代码中正确使用@state参数,这也可以作为属性(dsMySource.SelectParameters
)访问。