LoginSignup
0
0

More than 3 years have passed since last update.

ASP.NET WebフォームのGridViewで、ある列が空白である場合の分岐処理

Last updated at Posted at 2020-11-18

今でもメンテでASP.NETをやってる人っているとは思いますが、いささか時代遅れっぽい記事を。

GridViewで表を表示したとき、ある列の項目が空の場合にセルの表示を変える分岐処理を加えたかったのですが、String.IsNullOrEmptyやString.IsNullOrWhiteSpaceで判定をしたくても引っかからない。デバッグしてみたところHTMLエンコーディングされた半角空白( )が入っていました。どうもGridViewの仕様みたい。というわけで、Server.HtmlDecodeメソッドでデコードしてやり、String.IsNullOrWhiteSpaceで判定してやればいいよ、というだけの話。

VB.NET
    Private Sub disableEmptyColumnsChkbox()
        For Each row As GridViewRow In gv.Rows
            Dim cb As CheckBox = row.FindControl("Check")
            If (String.IsNullOrWhiteSpace(Server.HtmlDecode(row.Cells(3).Text))) Then
                cb.Enabled = False
            End If
        Next
    End Sub
C#
private void disableEmptyColumnsChkbox()
{
    foreach (GridViewRow row in gv.Rows)
    {
        CheckBox cb = row.FindControl("Check");
        if ((string.IsNullOrWhiteSpace(Server.HtmlDecode(row.Cells(3).Text))))
            cb.Enabled = false;
    }
}

GridViewRowクラスをForeachにかけると一行ずつ値の判定などができる。gvというのは私が.aspxに配置したGridViewのID。チェックボックスを探すときはFindControlメソッドでIDを指定する(ここではCheckとしている)。ちなみにGridViewの中にチェックボックスを入れるときは、TemplateFieldで括る(参照:MSDN)。

上記のメソッドは3列目の値を見て空欄(=半角スペース)の場合に、チェックボックスのEnabledをFalseにするという内容。チェック入れた行をボタンでUPDATEしたりする、というときにあらかじめチェックボックスを使えなくしておけば、内容が空の場合の判定をしなくていいじゃん?という発想です。

ちなみにGridViewで非表示列の値を取り出したい時は、いろいろあるらしいのでそのうち(.aspxで非表示にせず、コードのほうでRowCreatedなどの時に非表示にしたりするとかいろいろ工夫している様子)。しかしGridViewって今どきのMVCフレームワークのものと比べるとあまり便利じゃないな。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0