- PR -

ItemDataBoundイベントが発生しません

1
投稿者投稿内容
かわ
会議室デビュー日: 2007/03/19
投稿数: 4
投稿日時: 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/04/17
投稿数: 89
お住まい・勤務地: 北のほうの国
投稿日時: 2007-12-19 16:04
Handle が設定されていませんね。

コード:

Private Sub DataGrid1_ItemDataBound(ByVal sender As Object, _
ByVal e As System.Web.UI.WebControls.DataGridItemEventArgs) _
Handles DataGrid1.ItemDataBound



もしくは、HTMLソースで

コード:

<asp:datagrid id="DataGrid1" runat="server" OnItemDataBound="DataGrid1_ItemDataBound"



の記載を確認してみてください。

[ メッセージ編集済み 編集者: よっし〜。 編集日時 2007-12-19 16:06 ]
かわ
会議室デビュー日: 2007/03/19
投稿数: 4
投稿日時: 2007-12-19 16:31
よっし〜。様、ご回答ありがとうございました。
すみません、初歩的なミスでした。直りました。

いちどVSのドロップダウンを使ってイベント文をを作りなおそうとしたら、もとの文に飛んでいってしまうので、これでいいのかと思ってました。右の方までスクロールして確認する必要がありましたね・・すみません。

それにしても3つのイベントからハンドルズ文が消えたのは謎です。。。
1

スキルアップ/キャリアアップ(JOB@IT)