2017-10-06 9 views
-3

私はPage_Loadイベントで2つのSQLテーブルを塗りつぶすデータセットを持っています。 DropDownList ddlAirport00に最初のテーブルの値を入力します。しかし、ddlAirport00_SelectedIndexChanged()からいっぱいのデータセットにアクセスすることはできません。データセットが空であるか、変数のスコープに問題があるようです。 誰かが私を助けることができますか?page_loadに埋め込まれたアクセスデータセット

 public partial class _Default : System.Web.UI.Page 
    { 
     public DataSet ds = new DataSet(); 

    } 

私のPage_Load

protected void Page_Load(object sender, EventArgs e) 
    { 
     if (!IsPostBack) 
     { 
      String CS = ConfigurationManager.ConnectionStrings["MyDatabaseConnectionString1"].ConnectionString; 
      using (SqlConnection scon = new SqlConnection(CS)) 
      { 
       //this.ds = new DataSet(); 
       sda = new SqlDataAdapter("Select * from Aeropuerto", scon); 
       sda.Fill(ds, "Aeropuerto"); 

       sda = new SqlDataAdapter("Select * from ALocalidad", scon); 
       sda.Fill(ds, "Localidad"); 

       sda = new SqlDataAdapter("Select * from Tramo", scon); 
       sda.Fill(ds, "Tramo"); 
      } 
} 

そして私のDDLのSelectedIndexChanged()ロジックを取得するデータはif (!IsPostBack)の内側に位置しているので**私はtesteeric.Text

protected void ddlAirport00_SelectedIndexChanged(object sender, EventArgs e) 
    { 
     if (ds.Tables.Contains("Tramo")) 
     { 
       testeeric.Text = DateTime.Now.ToString(); 
     } 
     else 
     { 
      testeeric.Text = "Brasil"; 
     } 
} 
+0

ここにコードをいくつか追加してください。他の人があなたの質問を理解するのに役立ちます。 – IsuruAb

+0

これは古典的なasp.netです。 page loadとselectedindexchangedメソッドは異なるコンテキストを持ちます。データセットfrondbを再度取得するか、キャッシングをソートする必要があります。 –

+0

ページがポストバックするたびに、Pageクラスの新しいインスタンスが表示されます。つまり、すべてのフィールド(クラスインスタンスに固有の変数)は、リクエストごとに新しくなります。これらの値を使用して要求間で値を保持することはできません。データをどこかにキャッシュするか、値を再クエリする必要があります。 – mason

答えて

1

を変更するにはアヤックスを使用して、初期ページロード時にのみ呼び出されます。

したがって、SelectedIndexChangedイベント内でデータベースからデータを再度取得する必要があります。

protected void ddlAirport00_SelectedIndexChanged(object sender, EventArgs e) 
{ 
    String CS = CnfigurationManager.ConnectionStrings 
     ["MyDatabaseConnectionString1"].ConnectionString; 
    using (SqlConnection scon = new SqlConnection(CS)) 
    { 
     sda = new SqlDataAdapter("Select * from Tramo", scon); 
     sda.Fill(ds, "Tramo"); 

     // Do something. 

     if (ds.Tables.Contains("Tramo")) 
     { 
      testeeric.Text = DateTime.Now.ToString(); 
     } 
     else 
     { 
      testeeric.Text = "Brasil"; 
     } 
    } 
} 
+0

ロジックを複数の場所にコピー/ペーストするのではなく、共通ロジックを含むメソッドを使用する方法を示すことをお勧めします。 – mason

+0

パブリックデータセットを記入してアクセスすることはできません。 – Feijuca

+0

@Feijuca Httpは状態が少ないので、以前の要求からのデータを維持できませんでした。記述したようにしたい場合は、 'Page_Load'イベントの中で' if(!IsPostBack) 'を使うべきではありません。 – Win

関連する問題