2011-06-04 66 views
0

我有一個下拉列表,它填充了來自SQL數據庫的數據。這是我可能在aspx文件中的。如何將aspx文件中的代碼(儘可能多)移至aspx.cs文件以實現代碼隱藏技術? 我的意思是至少SELECT部分​​。 謝謝。如何將此示例aspx代碼移至aspx.cs(以實現後面的代碼)?

<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> 

回答

1

假設你要綁定的數據源SqlDataSource1網格那麼您可以在代碼隱藏趕上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(); 
      } 
     } 
    } 
} 
0

SelectCommand是您正在使用的數據源對象的屬性。這些可以在後面的代碼中根據需要應用,但是您可能希望在重寫的初始頁面函數中執行,因爲這可能會在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)。