- - PR -
ItemDataBoundイベントが発生しません
1
投稿者 | 投稿内容 | ||||||||
---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2007-12-19 15:26
お世話になっております。
VB.NET、ASP.NET(バージョン1.1)でWeb開発をしている者です。 以前本番でも動いていたDataGridの処理が、一度システム消して入れ替えた(若干の変更はしました)とたんに、ItemDataBoundイベントが発生しなくなってしまいました。 変更箇所はラベルのテキスト部分とか、エラーメッセージのテキスト部分とか、まったく影響が考えられない部分です。 デバッグをしていると、DataGrid1.DataBind()からすぐにデータリーダのクローズに行ってしまいます。 ちなみに他のページでも同じような処理をしていて、こちらは正常に動きます。 何か原因は考えられないでしょうか? コードを添付しておきます。 ドロップダウンリストで選んだ年の、サークルの活動報告を表示するアプリです。 DBに写真と活動報告(ActivityReport)の文章が格納されています。 写真をテンポラリファイルに落としてから、表示処理をしています。 セルに削除ボタンを設置していて、DBにあるパスワードと一致すると削除できます。 ========================================= Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load '初期表示では現在の年の活動報告一覧を出力する If Not IsPostBack Then Dim now As System.DateTime = DateTime.Now Dim nowyear As String = now.ToString("yyyy") Dim nowDateTimeEdit As String = "1/1/" + nowyear + " 00:00:00" DropDownList1.SelectedValue = nowDateTimeEdit '表示処理実行 Hyouji() Else End If End Sub Private Sub Hyouji() '文字列の年をDateTime型に変換、その年の1月1日、12月31日の年月日を作成 Dim myDateTime1 As System.DateTime = _ System.DateTime.Parse(DropDownList1.SelectedValue) Dim myYear1 As String = myDateTime1.ToString("yyyy") Dim myDateTimeEdit As String = "31/12/" + myYear1 + " 23:59:59" Dim myDateTime2 As System.DateTime = _ DateTime.ParseExact(myDateTimeEdit, "dd/MM/yyyy HH:mm:ss", Nothing) 'データベース接続、ストアードプロシージャ実行のためのパラメータセット Dim cn As New SqlConnection(ConfigurationSettings.AppSettings("cnstr")) Dim cmd As New SqlCommand("ActivityReportIndicate", cn) cmd.CommandType = CommandType.StoredProcedure '入力パラメータの設定 Dim p1 As SqlParameter = cmd.Parameters.Add("@param1", SqlDbType.DateTime) p1.Value = myDateTime1 Dim p2 As SqlParameter = cmd.Parameters.Add("@param2", SqlDbType.DateTime) p2.Value = myDateTime2 '出力パラメータの設定 Dim p3 As SqlParameter = cmd.Parameters.Add("@param3", SqlDbType.Int) p3.Direction = ParameterDirection.Output '接続開始、プロシージャ実行、写真をファイルに保存 cn.Open() Dim dr As SqlDataReader = cmd.ExecuteReader() Do While dr.Read() Dim FilePass As String Dim Renban As String = CType(dr.Item("ARnumber"), String) FilePass = Server.MapPath("./") & "/member/IMGTMP/" & Renban & ".JPG" Dim imageData As Byte() = dr.Item("ARPhoto") Dim fs As New FileStream(FilePass, FileMode.Create, FileAccess.Write) 'Dim fs As New FileStream(FilePass, FileMode.OpenOrCreate, FileAccess.Write) fs.Write(imageData, 0, imageData.Length) fs.Close() Loop 'このデータリーダのクローズ dr.Close() 'グリッドに表示するためのデータリーダの作成、データキーの設定、バインド Dim dr2 As SqlDataReader = cmd.ExecuteReader() DataGrid1.DataSource = dr2 DataGrid1.DataKeyField = "ARnumber" DataGrid1.DataBind() 'Close、出力パラメータ取得 dr2.Close() Label1.Text = p3.Value & "件の結果" cn.Close() End Sub Private Sub DropDownList1_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) '表示処理実行 Hyouji() End Sub Private Sub DataGrid1_ItemDataBound(ByVal sender As System.Object, ByVal e As System.Web.UI.WebControls.DataGridItemEventArgs) 'ItemTypeがヘッダーフッター以外の時に処理を行う Select Case e.Item.ItemType Case ListItemType.Item, ListItemType.AlternatingItem 'イメージコントロールがあるセルを探して、 'イメージ型に変換し、ImageUrlに活動報告連番のファイル名を指定する Dim I As String = e.Item.ItemIndex Dim filename As String = DataGrid1.DataKeys(I) CType(e.Item.FindControl("Image1"), _ System.Web.UI.WebControls.Image).ImageUrl = _ "http://本番のURL/member/IMGTMP/" & filename & ".jpg" '文章の改行マークをリプレイスし、改行させる Dim Bunsyo As String = e.Item.Cells(2).Text.Replace(vbCrLf, "<br>") '文章の最初に日付、最後に文責を追加する e.Item.Cells(2).Text = _ e.Item.Cells(0).Text & "<br><br>" & Bunsyo _ & "<br><br>" & "(文責:" & e.Item.Cells(3).Text & ")" & "<br><br><br>" '削除ボタンの列を探してボタン型に変換し、OnClick属性を追加(確認メッセージを表示させる) CType(e.Item.Cells(4).FindControl("Button1"), _ Button).Attributes.Add("onclick", "return confirm('本当に削除しますか?');") End Select End Sub Private Sub DataGrid1_ItemCommand(ByVal source As System.Object, ByVal e As System.Web.UI.WebControls.DataGridCommandEventArgs) Dim cn As New SqlConnection(ConfigurationSettings.AppSettings("cnstr")) Dim cmd As New SqlCommand("ActivityReportDelete", cn) cmd.CommandType = CommandType.StoredProcedure '入力パラメータの設定 (p1は活動報告連番、p2は削除パスワード) Dim p1 As SqlParameter = cmd.Parameters.Add("@p1", SqlDbType.Int) p1.Value = DataGrid1.DataKeys(e.Item.ItemIndex) Dim p2 As SqlParameter = cmd.Parameters.Add("@p2", SqlDbType.Char, 10) '入力されたパスワードを設定 p2.Value = (CType(e.Item.Cells(4).FindControl("TextBox2"), TextBox)).Text '接続 cn.Open() cmd.ExecuteNonQuery() cn.Close() '再表示 Hyouji() End Sub | ||||||||
|
投稿日時: 2007-12-19 16:04
Handle が設定されていませんね。
もしくは、HTMLソースで
の記載を確認してみてください。 [ メッセージ編集済み 編集者: よっし〜。 編集日時 2007-12-19 16:06 ] | ||||||||
|
投稿日時: 2007-12-19 16:31
よっし〜。様、ご回答ありがとうございました。
すみません、初歩的なミスでした。直りました。 いちどVSのドロップダウンを使ってイベント文をを作りなおそうとしたら、もとの文に飛んでいってしまうので、これでいいのかと思ってました。右の方までスクロールして確認する必要がありましたね・・すみません。 それにしても3つのイベントからハンドルズ文が消えたのは謎です。。。 |
1