どうでもいいことのプチネタだけど、もしかして役に立つかも

セバのプチネタ

c# GridViewでセルに表示する内容を改行したい

更新日:

データに改行コードが入っているのにGridViewで改行しない

SQL Serverのストアドプロシーシャーを使って改行コードの入っているデータを生成して、GridViewで表示しようとしたが改行されない。

そこで、ストアドプロシージャで改行コードを<br>タグに変換して表示させようとしたところ、今度はブラウザで○○○<br>○○○やと表示されてしまう。

サーバー環境

OS windows
アプリケーションサーバー iis
データベース SQL Server

開発環境

OS windows
開発ツール visual studio c#
ブラウザの種別 指定なし

GridViewで改行できない理由

<br>タグはブラウザに対して制御コードになります。

その為、GridViewは悪意のあるHTMLタグ、JavaScript、SQL文などが解釈・実行されることを防ぐ為に制御コードを無害化します。

その事をサニタイジング(エスケープ)と言います。

GridViewのサニタイジングの有効/無効はHtmlEncodeプロパティーでコントロールできるはずなんですが、ストアドプロシージャからデータを取得する時はうまく行きません。

viewを使ってデータを取得する時はこれでうまく行くんですが、ストアドプロシージャからデータを取得する時は、このプロパティーは無視されるようです。

GridViewで改行させる方法

c#では改行コードに’\n’を使うので、そのコードが来たらプログラムで<br>タグに変換します。

データ変換はGridViewのRowDataBoundイベントで、一行毎のデータがバインドされた時に拾います。

row.Cells[i].Text.Replace(“\\n”, “<br />”);

これで、改行コードが<br>タグに書き換えます。

Replaceで第1パラメータが’\\n’になっているのば、正規表現で\は特殊文字として取り扱われるので、\nを探す時は\\nで表現します。


       protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
        {
            GridViewRow row = e.Row;
            if (e.Row.RowType == DataControlRowType.DataRow)
            {
                for (int i = 0;  row.Cells.Count>i; i++)
                {
                    //System.Diagnostics.Debug.WriteLine(row.Cells[i].Text);
                    row.Cells[i].Text = row.Cells[i].Text.Replace("\\n", "<br/>");
                }
            }
        }

  • B!