misc.log

日常茶飯事とお仕事と

AccessDataSourceにパラメータ付きSQLを設定する

PC管理台帳をWeb閲覧、果てはWebから編集できるようにしたいな〜作戦。とりあえず「簡単な一覧→選択したらそのPCの詳細情報ページに遷移」あたりからやってみるかと。

選択した値を次のページに引き渡すには、セッションやクッキーを使う方法や、ページのパラメータで渡しちゃう方法などあるみたいだけど、とりあえずセッションオブジェクトを使ってみる。

元のページで選択された行の情報は、

Protected Sub PCGrid_SelectedIndexChanged(ByVal sender As Object, ByVal e As EventArgs) Handles PCGrid.SelectedIndexChanged

    Dim pcNumber As Integer = CInt(PCGrid.SelectedRow.Cells(1).Text)
    Session("SelectedPCNo") = pcNumber
    Response.Redirect("PCDetail.aspx")

End Sub

みたいな感じで、グリッドのSelectedIndexChangedイベントの処理でPCを特定する情報をグリッドから引き出してセッションオブジェクトの「SelectedPCNo」に設定しておく。その後、リダイレクトで次の「PCDetail」ページに。
PCDetailページでは、詳細情報用に「DetailsView」コントロールと、これまたAccessDataSourceオブジェクトを用意しておく。昨夜はここで詰まった。AccessDataSourceに設定するSQLに、「WHERE PC通番=@SelectedPCNo」なんて条件文を追加しても、そこに実際に値を設定できなかった(今日になって、グリッドのデータソースに、用意したAccessDataSourceを設定し忘れていたことに気づく...)。
で、さらにデータバインドしてもコードからどう書くのか判らなかったのだが、これ、AccessDataSourceのプロパティ、SelectQueryの右端の「...」をクリックすると、パラメータと、初期状態でそれをどこから取り込むかを選択することができた。ほんと、コード書かずに実装できちゃうのね。選択肢には、クッキーやQueryStringやセッションが選択できるようになっているので、そこでSessionを指定し、SessionFieldに元のページで指定した「SelectedPCNo」を指定すると、無事表示された。

なんとまぁ。