トップ回答者
レポート定義ファイル(rdlc)内テキストボックスに、自作の関数を使った式を挿入できますか?

質問
-
開発環境: Visual Studio 2008 , C#
MicrosoftReportViewerの定義ファイル(rdlc)に設置したテキストボックスに関する質問です。
<質問>
rdlc内に配置したテキストボックスに、自作の関数を使った式を挿入できまますか。<現状>
テキストボックス内の式に、自作した関数を使用すると、デバッグ時に、「テキスト ボックス 'textbox1' の Value 式にエラーが含まれています: [BC30451] 名前 'F_yyyyMMddToWareki' は宣言されていません」とエラーが出ます。関数はプロジェクトにコードファイル(CodeFile1.cs)を追加し、その中に記述しています。テキストボックス内の式は「=F_yyyyMMddToWareki(Fields!BirthDay.Value)」です。関数はデータソースから数字8桁の文字列を受け取り、和暦に変換するものです(ex. 19800102--->昭和55年1月2日)。下記サイトを参考にして作成しました。
http://www.atmarkit.co.jp/fdotnet/dotnettips/203dateparse/dateparse.html
http://www.atmarkit.co.jp/fdotnet/dotnettips/034wareki/wareki.htmlMSDN(http://msdn.microsoft.com/ja-jp/library/ms252112(v=VS.90).aspx)によると、「組み込み関数の他に、Visual Basic の関数を使用した式もレポートに含めることができます」とあります。また、Basic構文についても調べました。その結果、「rdlc内の式で自作の関数を呼び出すことが出来ない」のでは、と疑問が生じ、今回の質問をしました。
<その他に試したこと>
テキストボックスのCalendarプロパティを「Japanese」にすれば、式「=cdate(left(Fields!BirthDay.Value,4) & "/" & mid(Fields!BirthDay.Value),5,2) & "/" & right(Fields!BirthDay.Value),2))」が、時刻付で和暦に変換(ex. 19800102--->昭和55年1月2日 0:00:00)されます。しかし、今回例示している以外のテキストボックスで、文字列を&で連結している式があるので、関数の利用を検討しています。以上、回避策やコードの記述場所の誤り等ありましたら、宜しくお願い致します。
using System; using System.Globalization; public class F_DateChange { public static string F_yyyyMMddToWareki(string d) { string f; DateTime dt; f = "yyyyMMdd"; dt = DateTime.ParseExact(d, f, null); CultureInfo culture = new CultureInfo("ja-JP", true); culture.DateTimeFormat.Calendar = new JapaneseCalendar(); string result = dt.ToString("ggyy年M月d日", culture); return result; } }
回答
-
この程度の関数なら、埋め込みコード を使うといいでしょう。
レポートデザイナのレポートのプロパティでコードタブを選択すると、カスタムコードを記述できます。(VBコード)
Public Shared Function F_yyyyMMddToWareki(ByVal d As String) Dim f As String Dim dt As DateTime f = "yyyyMMdd" dt = DateTime.ParseExact(d, f, Nothing) Dim culture As New System.Globalization.CultureInfo("ja-JP", True) culture.DateTimeFormat.Calendar = New System.Globalization.JapaneseCalendar() Return dt.ToString("ggyy年M月d日", culture) End Function
で、関数を使いたいところに、こんなふうに使います。
この場合はテキストボックスのValueプロパティです。
=Code.F_yyyyMMddToWareki("20010101")
#カスタムコードやカスタムアセンブリは情報が少ない・・・- 回答としてマーク PermanentTraveler 2010年9月20日 1:46
すべての返信
-
この程度の関数なら、埋め込みコード を使うといいでしょう。
レポートデザイナのレポートのプロパティでコードタブを選択すると、カスタムコードを記述できます。(VBコード)
Public Shared Function F_yyyyMMddToWareki(ByVal d As String) Dim f As String Dim dt As DateTime f = "yyyyMMdd" dt = DateTime.ParseExact(d, f, Nothing) Dim culture As New System.Globalization.CultureInfo("ja-JP", True) culture.DateTimeFormat.Calendar = New System.Globalization.JapaneseCalendar() Return dt.ToString("ggyy年M月d日", culture) End Function
で、関数を使いたいところに、こんなふうに使います。
この場合はテキストボックスのValueプロパティです。
=Code.F_yyyyMMddToWareki("20010101")
#カスタムコードやカスタムアセンブリは情報が少ない・・・- 回答としてマーク PermanentTraveler 2010年9月20日 1:46