今でもメンテでASP.NETをやってる人っているとは思いますが、いささか時代遅れっぽい記事を。
GridViewで表を表示したとき、ある列の項目が空の場合にセルの表示を変える分岐処理を加えたかったのですが、String.IsNullOrEmptyやString.IsNullOrWhiteSpaceで判定をしたくても引っかからない。デバッグしてみたところHTMLエンコーディングされた半角空白( )が入っていました。どうもGridViewの仕様みたい。というわけで、Server.HtmlDecodeメソッドでデコードしてやり、String.IsNullOrWhiteSpaceで判定してやればいいよ、というだけの話。
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
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フレームワークのものと比べるとあまり便利じゃないな。