| 2009/12/13(Sun) 16:54:39 編集(投稿者) 2009/12/13(Sun) 16:45:50 編集(投稿者) 2009/12/13(Sun) 16:45:05 編集(投稿者)
■No44597 (サトシ さん) に返信 > いつもお世話になってます。 > 以前、TemplateFieldの特定の単語を強調表示したい件でお世話になった > http://bbs.wankuma.com/index.cgi?mode=all&namber=44353 > の続きの質問です。 > > GridViewのTemplateFieldの特定の単語を強調表示するのに、多数のTemplateField列へ > 対応するコードの書き方がわからなくて困っております。 > 以下の様なテストDBを作りました。 > |ID|名前Template|年齢Template|子供名Template| > | 1|鈴木一郎 |35 |太郎 | > | 2|鈴木次郎 |55 |一郎 | > | 3|田中一郎 |43 |花子 | > | 4|田中三郎 |37 |一郎 | > > 複数のTemplateFieldがあり、GridViewではItemTemplateはLabel1, Label2, Label3で情報 > が表示されています。 > このデータをGridViewで表示し、中の「一郎」だけを強調表示する以下のコードを書きました。 > Protected Sub GridView1_RowDataBound(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewRowEventArgs) > If e.Row.RowType = DataControlRowType.DataRow Then > If e.Row.RowIndex = Me.GridView1.EditIndex Then Return > For i As Integer = 1 To e.Row.Cells.Count - 1 > Dim dumLabel As Label = e.Row.FindControl("Label" & Asc(i)) > dumLabel.Text = dumLabel.Text.Replace("一郎", "<B Style='background-color:#fff495'>一郎</B>") > Next > End If > End Sub > > しかし、 > dumLabel.Text = dumLabel.Text.Replace("一郎", "<B Style='background-color:#fff495'>一郎</B>") > の行で、「NullReferenceExceptionはユーザーコードによってハンドルされませんでした。 > オブジェクト参照がオブジェクト インスタンスに設定されていません。」 > のエラーが発生し動きません。 > どのあたりに原因があり、解決はどの様に考えればよいでしょうか?よろしくお願いします。 > > VWD2008, MS Access2003です。
Asc関数は引数で渡された文字(Char型、String型を渡した場合は先頭の文字)のアスキーコード(数値)を取得する関数。 つまり、"a"を渡したら97、"1"を渡したら49を返す。 数値型を渡した場合は暗黙的にString型に変換され渡されるから、 For i As Integer = 0 To 99 e.Row.FindControl("Label" & Asc(i)) Next とした場合、"Label48"から"Label57"を(10回)検索することになる。
単に e.Row.FindControl("Label" & i) でOK |