- PR -

Container.DataItemの判定をしてDataGridに表示したい

投稿者投稿内容
キョウ
常連さん
会議室デビュー日: 2003/04/30
投稿数: 49
投稿日時: 2003-06-25 11:03
ぴで様より引用------------------------------------------------------------

stringで取りたいなら
<%# changes(DataBinder.Eval(Container.DataItem,"YOSNOB").ToString())%>
ですね!

--------------------------------------------------------------------------
なるほど!理解です。


この時のDispCount関数(↑の引用でいうchanges関数)をそのaspxファイルの
コードビハインドファイルに書いていますが、この関数を一箇所に書いて複数の
aspxファイルの共通関数として呼び出したいと思います。

コードビハイントファイル以外に関数をおいて、やってみたのが、
(1)ディレクティブのInheritsを増やす→複数のInheritsを宣言できないとエラー
(2)staticにして呼び出す(クラス名.DispCountと記述して呼び出す)
   →全然関数は見えないようです。

と、試した所で早くもお手上げになってしまいました。
重ね重ねなのですが、アドバイスを頂けますでしょうか?
GUNNM
常連さん
会議室デビュー日: 2002/01/23
投稿数: 30
お住まい・勤務地: 横浜
投稿日時: 2003-06-25 13:12
試していないので、自信有りませんが、
ImportディレクティブでNameSpaceを登録すると、他のクラスも見えると思います。
こんな感じです。
<%@ Import Namespace="TE03.Register.Business" %>

DispCountメソッドを実装した、WebFormクラスの派生クラスをつくり、
DispCountメソッドを利用したいASPXは、作ったクラスから派生する方法もあるかな、と思います。
キョウ
常連さん
会議室デビュー日: 2003/04/30
投稿数: 49
投稿日時: 2003-06-25 14:24
Importディレクティブを使用して、ばっちりできました!ありがとうございます。

2番目の継承の話ですが、コードビハインドファイルは、System.Web.UI.Page
を継承して作られているので、無理なのではないでしょうか?それとも
aspxファイル自体に継承する機能が付いているのでしょうか?
もし、理解が間違っていたらご指摘お願いします。
GUNNM
常連さん
会議室デビュー日: 2002/01/23
投稿数: 30
お住まい・勤務地: 横浜
投稿日時: 2003-06-26 00:45
申し訳ない。私の説明が悪かったです。
System.Web.UI.Pageと、コードビハインドファイルに記述されているクラスの間に
適当なクラスを挟む形で派生関係にすると良いと思います。

コードビハインドファイル内のクラス自体が、System.Web.UI.PageとASPXファイルの間に挟んであるクラスですし。

だから、Protectedのメソッドが呼び出せたり、WebコントロールがProtectedで宣言する必要があるんですよね?たぶん。。。。

[ メッセージ編集済み 編集者: GUNNM 編集日時 2003-06-26 00:48 ]
ZEBRA
常連さん
会議室デビュー日: 2003/04/14
投稿数: 38
投稿日時: 2003-06-26 01:09
こんばんわ。
以前、私が書込みしたスレッド「DataGridにて行数表示方法」は参考にできないでしょうか?(ソースを掲載しているスレッドです)
目的は異なりますが、使ってる技術は同じなので、応用で何とか解決できるかと思います。
当スレッドでは、コードビハインドにロジックを記述することで解決していますが、この場合だと、三項演算子をうまく利用すれば、aspx側だけでも解決できるかもしれませんね。
但し、aspxにロジカルな部分を実装すると、以下のデメリットがあります。
@デバッグ実行時に、中身の値の確認が難しい。
A実行時バインディングなので、文法の誤りも実行でないと検知できない

キョウ
常連さん
会議室デビュー日: 2003/04/30
投稿数: 49
投稿日時: 2003-06-26 10:14
GUNNM様:
「System.Web.UI.Page」を継承したクラスを作り、コードビハインドファイルは、
そのクラスを継承する形にするという事ですよね?通常、コードビハインドファイル
のクラスが
public class WebForm1 : System.Web.UI.Page
となっている部分を
public class WebForm2 : ClassHoge
に変更すると、以下のエラーがでます。(ClassHogeは、System.Web.UI.Pageのサブクラス)

--エラー----------------------------------------------------------------------------

Webフォームデザイナにファイルを読み込めませんでした。以下のエラーを修正して
から再度読み込んでください。ファイル内にデザインできるクラスがないため、こ
のファイルのデザイナを表示できませんでした。ファイルの以下のクラスがデザイ
ナで見つかりました。

WebForm1---基本クラス”WebApplicarion1.ClassHoge”を読み込めませんでしたアセ
ンブリが参照されているか、またはプロジェクトの一部である場合はビルドされて
いる事を確認してください。

------------------------------------------------------------------------------------

・・・・まだ理解が間違っているようですね。レスを見たときにはな〜るほど!と思ったのですが。


ZEBRA様:
>@デバッグ実行時に、中身の値の確認が難しい。
>A実行時バインディングなので、文法の誤りも実行でないと検知できない
できれば、aspxファイルには画面の情報だけを載せて、ロジカルな部分については
コードビハインドの方に乗せたいと思っています。@は大きいですし。
未記入
ベテラン
会議室デビュー日: 2002/09/10
投稿数: 68
投稿日時: 2003-06-26 19:42
おそらくエラーの原因は、ClassHogeがabstract で宣言されている
とかではないでしょうか?
その場合、VS.NETの制限(たぶん)でうまくデザイナで表示できません。

System.Web.UI.Pageからの継承を
VS.NETと折り合いをつけながら、
どう使っていくかというのはとても興味深い題材ですね。

しかしながら、そもそも継承は共通関数を呼ぶためだけに
使うべきものではないかな、とも思います。
ZEBRA
常連さん
会議室デビュー日: 2003/04/14
投稿数: 38
投稿日時: 2003-06-26 23:29
キョウさんへ

>ZEBRA様:
>>@デバッグ実行時に、中身の値の確認が難しい。
>>A実行時バインディングなので、文法の誤りも実行でないと検知できない
>できれば、aspxファイルには画面の情報だけを載せて、ロジカルな部分については
>コードビハインドの方に乗せたいと思っています。@は大きいですし。

ええ、ですから私が以前書込みしたスレッドは、上記@Aを満たしていますよ。
これを参考にすれば、キョウさんの期待通りの実装を実現できると思います。
一度、試されるすぐお分かりになると思います。

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