- ベストアンサー
ListViewで条件によって表示を変えたい。
ASP:C#を使ってソースを作っています。 ListViewというSQLを表示するのに便利なタグがあったのでそれを使用しています。 ですが、取得したデータの中身を参照して、参照したデータによって表示を変えたいのですが、 Evalでデータを貼り付けることはできるのですが、stringやintなどの変数に代入出来なさそうです。 ListViewの中で、条件文を挿入することは出来るのでしょうか?
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
> データのAの中身をみて、それが0なら、Bを表示、1なら、「削除されました」などのメッセージを表示させる。 > と言ったことを操作したかったのです。 カスタムバインドでコードビハインドのファイルにpublicなメソッド書けばできます。 最初に提示したURLの中でもやってますが。。。 aspxファイルの中だけ、というかコードを記述しない、ということであれば無理です。
その他の回答 (3)
- onos
- ベストアンサー率81% (127/155)
> ちなみに、以下のように定義しています。 > <% string text = Eval("Text").ToString(); %> これはそもそも無理ですね。 ASP.NETが解釈できません。 ちなみに、なぜこのような型変換が必要なんでしょうか? 特にstring型には変換せずともそのまま表示してくれるはずですが。
お礼
データのAの中身をみて、それが0なら、Bを表示、1なら、「削除されました」などのメッセージを表示させる。 と言ったことを操作したかったのです。 条件文を入れるためにはint型かstring型に入れないと判定できないので、キャストもしくはメソッドで変換をかけたかったのですが、無理なようですね。 現状は、SQL構文内で判定してテキストを出力させると言ったことで対応しています。 また、取得した文字列の一部文字を変更したいなと言うときにでもEvalでは利用できないですね。 なにか解決策でもありましたら、よろしくお願いします。 解決策が無ければ、これで終わりにしたいと思います。
- onos
- ベストアンサー率81% (127/155)
データが取得できているのなら、string型にするのにはToStringメソッドを、int型にするのにはConvert.ToInt32などを使えばよいでしょう。 このあたりはC#の基本書を読むべきかと。 なお、ASP.NETの場合、最終的には文字列になるので、ListViewの内部でint型にする必要があるかどうかはよく考えたほうがいいと思います。
お礼
前回キャスト出来ないと書きましたが、 ToStringメソッドでも下記のようなエラーになって、string型に変換できませんでした。 『Eval()、XPath()、および Bind() のようなデータバインド メソッドは、データバインドされたコントロールのコンテキストでのみ使用することができます。』 ちなみに、以下のように定義しています。 <% string text = Eval("Text").ToString(); %> 以下のような使い方だと使えるので、SQLでデータを入れ替えることにします。 <%# Eval("Text") %> ありがとうございました。
- onos
- ベストアンサー率81% (127/155)
http://blogonos.wordpress.com/2006/05/11/%e3%83%87%e3%83%bc%e3%82%bf%e3%81%ae%e5%80%a4%e3%81%ab%e3%82%88%e3%81%a3%e3%81%a6gridview%e3%81%ab%e8%a1%a8%e7%a4%ba%e3%81%95%e3%82%8c%e3%82%8b%e3%82%b3%e3%83%b3%e3%83%88%e3%83%ad%e3%83%bc%e3%83%ab/ #う、URLがひどいことに。。。 えと、このページではGridViewでやってますがListViewでも同じようにカスタムバインドを使うことができます。 また、表示の書式を変える程度のことであれば、DataFormatStringを利用すれば解決できると思います。
お礼
ありがとうございます。 カスタムバインドで値を取得しているのですが、そのデータを表示させることは出来るのですが、 string型やint型にキャストするところで、つまずいてしまいます。 今回は、Aのデータを参照してBのデータの出力を変更させるといったものだったので、 とりあえず、SQLのCASE文を利用し、表示させるデータを書き換えることにしました。
お礼
返事が遅れてすみません。 コードを記述したら出来ました。 ありがとうございます。