C# と VB.NET の質問掲示板

わんくま同盟

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト


(過去ログ 76 を表示中)
■44598 / )  Re[1]: TemplateFieldの特定単語を強調表示したい
□投稿者/ gtk2k (131回)-(2009/12/13(Sun) 16:41:56)
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
返信 編集キー/


管理者用

- Child Tree -