- PR -

DataGrid の表示形式の設定について

投稿者投稿内容
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2006-03-10 18:25
System.Int32.Parse(databinder.eval(container.dataitem,"startymd")).ToString("0000/00/00")

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
ひろれい
ぬし
会議室デビュー日: 2006/03/02
投稿数: 486
お住まい・勤務地: 万博開催地
投稿日時: 2006-03-10 18:48
引用:

じゃんぬねっとさんの書き込み (2006-03-10 18:25) より:
System.Int32.Parse(databinder.eval(container.dataitem,"startymd")).ToString("0000/00/00")




そうでした。Parseだと厳密にチェックされるので、日付型でないとダメですね。この間、じゃんぬさんに教えていただいたばかりなのに・・・
  ・CInt("12.5")
  ・Int32.Parse("12.5")
申し訳ありません(m_m)

色々と試しているのですが、どうも「三項演算子」が使えないようです。単純に、

Text='<%# databinder.eval(container.dataitem,"startymd") != String.Empty ? "1" : "2" %>'
としても同じコンパイルエラーとなりますので。

上記のじゃんぬさんの式も試しましたが、ダメでした。
やはり、空文字と数値の混合は難しそうですね。う〜ん・・・


[ メッセージ編集済み 編集者: ひろれい 編集日時 2006-03-10 18:51 ]
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2006-03-10 18:59
引用:

ひろれいさんの書き込み (2006-03-10 18:48) より:

色々と試しているのですが、どうも「三項演算子」が使えないようです。


じゃあ、三項演算子を抜いた状態ならばできるというのでしょうか?
三項演算子ではなく、

> databinder.eval(container.dataitem,"startymd") != String.Empty

が原因だと思っていたのですが、見当違いでしたかね... (良かった言わなくて)

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
ひろれい
ぬし
会議室デビュー日: 2006/03/02
投稿数: 486
お住まい・勤務地: 万博開催地
投稿日時: 2006-03-10 19:22
引用:

じゃんぬねっとさんの書き込み (2006-03-10 18:59) より:

じゃあ、三項演算子を抜いた状態ならばできるというのでしょうか?
三項演算子ではなく、

> databinder.eval(container.dataitem,"startymd") != String.Empty

が原因だと思っていたのですが、見当違いでしたかね... (良かった言わなくて)



じゃんぬさんが疑われているのは「String.Empty」なのでしょうか?
名前空間が足りないとか。

色々と試しているのですが、

Text='<%# databinder.eval(container.dataitem,"startymd") = "" ? System.Int32.Parse(databinder.eval(container.dataitem,"startymd")).ToString("0000/00/00") : "" %>'

でもコンパイルエラーとなりますが、

Text='<%# System.Int32.Parse(databinder.eval(container.dataitem,"startymd")).ToString("0000/00/00") %>'

ならOKです。よって、「三項演算子」が原因かな、と。
囚人
ぬし
会議室デビュー日: 2005/08/13
投稿数: 1019
投稿日時: 2006-03-10 19:24
引用:

色々と試しているのですが、どうも「三項演算子」が使えないようです。


そうなんですか。出来ない理由が見当たらないんですけどね。

演算子の結合順位が != より三項演算子の方が強い?
…と思ったけど違うようですね。

Convert.ToString() 内には 三項演算子を書けるようですし、ソースコード変換に戸惑うんでしょうか。

コード:
Text='<%# (databinder.eval( container.dataitem, "startymd" ) != String.Empty ? DateTime.Parse( databinder.eval( container.dataitem, "startymd" ) ).ToString( "yyyy/MM/dd" ) : String.Empty )%>


最後の希望。全部カッコで囲んでしまう!
_________________
囚人のジレンマな日々
ひろれい
ぬし
会議室デビュー日: 2006/03/02
投稿数: 486
お住まい・勤務地: 万博開催地
投稿日時: 2006-03-10 19:43
引用:


コード:
Text='<%# (databinder.eval( container.dataitem, "startymd" ) != String.Empty ? DateTime.Parse( databinder.eval( container.dataitem, "startymd" ) ).ToString( "yyyy/MM/dd" ) : String.Empty )%>


最後の希望。全部カッコで囲んでしまう!


最後の希望も儚く散ってしまいました(;_;)

囚人さんとじゃんぬさんの技をドッキングしまして、

Text='<%# (databinder.eval(container.dataitem, "startymd") != String.Empty ? System.Int32.Parse(databinder.eval(container.dataitem,"startymd")).ToString("0000/00/00") : String.Empty) %>'

としました。コンパイルエラーの内容は変わりましたが・・・
−−−−−−−−−−−− 以下、エラー内容 −−−−−−−−−−−−
コンパイル エラー
説明 : この要求の処理に必要なリソースのコンパイル中にエラーが発生しました。以下の解析エラーの詳細を確認し、ソース コードに変更を加えてください。

コンパイラ エラー メッセージ: BC30519: 下位変換しないで呼び出される、アクセス可能な 'ToString' がないため、オーバーロードの解決に失敗しました :

//localhost/Test.aspx(111) : error BC30519: 下位変換しないで呼び出される、アクセス可能な 'ToString' がないため、オーバーロードの解決に失敗しました :
'Public Shared Function ToString(value As Long, toBase As Integer) As String': パラメータ 'value' と一致する引数は 'System.Object' から 'Long' へ下位変換します。
'Public Shared Function ToString(value As Long, toBase As Integer) As String': パラメータ 'toBase' と一致する引数は 'String' から 'Integer' へ下位変換します。
'Public Shared Function ToString(value As Integer, toBase As Integer) As String': パラメータ 'value' と一致する引数は 'System.Object' から 'Integer' へ下位変換します。
'Public Shared Function ToString(value As Integer, toBase As Integer) As String': パラメータ 'toBase' と一致する引数は 'String' から 'Integer' へ下位変換します。
'Public Shared Function ToString(value As Short, toBase As Integer) As String': パラメータ 'value' と一致する引数は 'System.Object' から 'Short' へ下位変換します。
'Public Shared Function ToString(value As Short, toBase As Integer) As String': パラメータ 'toBase' と一致する引数は 'String' から 'Integer' へ下位変換します。
'Public Shared Function ToString(value As Byte, toBase As Integer) As String': パラメータ 'value' と一致する引数は 'System.Object' から 'Byte' へ下位変換します。
'Public Shared Function ToString(value As Byte, toBase As Integer) As String': パラメータ 'toBase' と一致する引数は 'String' から 'Integer' へ下位変換します。

target.Text = System.Convert.ToString((databinder.eval(container.dataitem, "startymd") != String.Empty ? System.Int32.Parse(databinder.eval(container.dataitem,"startymd")).ToString("0000/00/00") : String.Empty ))
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//localhost/Test.aspx(111) : error BC30198: ')' が必要です。

以下、コンパイルエラーが続きます。
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2006-03-10 19:58
引用:

ひろれいさんの書き込み (2006-03-10 19:22) より:

じゃんぬさんが疑われているのは「String.Empty」なのでしょうか?
名前空間が足りないとか。


ちょっと違いますけど、比較演算子自体が使えないんじゃないかなと。

引用:

ならOKです。よって、「三項演算子」が原因かな、と。


試したことがないのでわかりませんが、演算子を含めるだけでダメとか...

Text = '<%# (" " == "").ToString(); %>'

分岐を含めるだけでダメとか...

Text = '<%# (" " == "") ? "1" : "2"; %>'

---

Text = '<%# databinder.eval(container.dataitem, "startymd").ToString != "" ? System.Int32.Parse(databinder.eval(container.dataitem, "startymd")).ToString("0000/00/00") : ""; %>'

試せる環境が欲しい... orz

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
ひろれい
ぬし
会議室デビュー日: 2006/03/02
投稿数: 486
お住まい・勤務地: 万博開催地
投稿日時: 2006-03-10 20:08
引用:

じゃんぬねっとさんの書き込み (2006-03-10 19:58) より:

試したことがないのでわかりませんが、演算子を含めるだけでダメとか...

Text = '<%# (" " == "").ToString(); %>'

分岐を含めるだけでダメとか...

Text = '<%# (" " == "") ? "1" : "2"; %>'




Text = '<%# (" " == "") ? "1" : "2"; %>' では、以下のコンパイルエラーとなります。

コンパイラ エラー メッセージ: BC30201: 式が必要です。
//localhost/TMT_test/page/Chinryo.aspx(111) : error BC30201: 式が必要です。

target.Text = System.Convert.ToString((" " == "").ToString())


Text='<%# (" " == "") ? "1" : "2" %>' でも同じコンパイルエラーとなります。

コンパイラ エラー メッセージ: BC30201: 式が必要です。

//localhost/TMT_test/page/Chinryo.aspx(111) : error BC30201: 式が必要です。

target.Text = System.Convert.ToString((" " == "") ? "1" : "2")

スキルアップ/キャリアアップ(JOB@IT)