问题描述
|
我有一个下拉列表,其中装有来自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>
解决方法
假设您正在将网格与数据源ѭ1binding绑定,那么您可以在代码隐藏中捕获
SelectedIndexChanged
事件,并获取数据来绑定网格,如下所示:
ASPX文件:
<asp:DropDownList ID=\"DropDownList1\" runat=\"server\"
OnSelectedIndexChanged=\"ddlChanged\" />
C#(代码隐藏):
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();
}
}
}
}
, ѭ5是您正在使用的数据源对象的属性。这些可以根据需要在后面的代码中应用,但是您可能希望在重写的Init页面函数中进行操作,因为这可能会在asp.net页面生命周期的早期使用。例如,尽管我不确定确切的位置。
protected override OnInit(object sender,EventArgs e)
{
dsMySource.SelectCommand = \"SELECT [au_id],[state] FROM [authors] WHERE [state] = @state\"
}
您还必须确保后面的代码也正确使用了@state参数,也可以将其作为属性(dsMySource.SelectParameters
)进行访问。