如何将此示例aspx代码移动到aspx.cs(以实现代码隐藏)?

时间:2011-06-04 06:54:08

标签: asp.net code-behind

我有一个下拉列表,其中填充了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>

2 个答案:

答案 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)访问。