[seasar-dotnet:849] Re: [S2Form]Gridタイプコントロールについて

菊池和彦 [E-MAIL ADDRESS DELETED]
2008年 5月 29日 (木) 09:54:52 JST


菊池です

 いえ、具象クラス基準ではないですよ。
 Windows Fromsでのデータバインディングの対象としては IList, IListSource,ITypedList,
IBindingListです。

 Windows Formsの場合ですが
 IList<T> がデータバインディングできないのは .NET Framework 1.1 との互換性です。

 .NET Framework 1.1の時期には ITypedList を経由して擬似Genericしていたのですが、
インターフェースのGenerics対応が遅れている…というよりコントロール側がパフォーマンスの
制約から IListにどっぷりと依存したコードベースになっているため移行できていないのが実際
のところと思います。

 前に書きましたが、IList<T>はBindingList<T>を使って IBindingList化できますので、
BindingList<T>経由でデータバインディングにもっていけますので、実際のところとしては
それほど不都合がないので BindingList<T> にラップさせる為の口が用意できれば良いの
ではないかと思います。

 一応、勘違いされると困るので書き添えますと、このような制約は Windows Forms だけです
ASP.NETは最低限度IEnumerable<T>が実装されていれば表示へのバインディングができます
し反映にはIDataSourceインターフェースを経由でInsert/Update/Deleteが行われる形なので、
コレクションインターフェースは無関係です。また、WPFではObservableCollection<T>にバイン
ディングができ、ObservableCollectionはIEnumerable<T>から構築できます。

 まぁ WPFでも ObservableCollection<T>にラップしてあげる必要があるなど、デスクトップ
アプリケーションにおけるデータのバインディングにはある程度のリアルタイム性が必要という
制約が関係してデータの受け渡しに介在する何かが必要になるのは実際ですので、DIという
かAOPで介在させるオブジェクトの選択やその詳細が指定できることが望ましいと思います。

2008/05/29 1:26 kubo <[E-MAIL ADDRESS DELETED]>:
> 久保です。
>
>> DataGridViewへのバインディングの動作の対応しているのは次の通りでした。
>> ・配列
>> ・System.Data.DataTable
>> ・System.Collections.ArrayList
>> ・System.Collections.Generic.List<T>
>> ・System.ComponentMode.BindingList<T>
>
> なんとも「具象クラス」が基準なのですね。。。
> (もしかして、IListをImplementsしてもダメだったり!?!?)
>
> https://www.seasar.org/svn/sandbox/dbflute/trunk/dbflute-nbasic-example
> にて、対応版があります。
> AllCommon.CBean.ListResultBeanがGenericじゃないIListを実装しています。
> こちらにある
> mydbflute/dbflute-0.7.3-rc1/templates/om/csharp/allcommon/cbean/ListResultBean.vmnet
> を利用することで上記の対応版クラスが生成されます。
>
> 2008/5/28 Hiroaki Fujii <[E-MAIL ADDRESS DELETED]>:
>> みなさまへ
>>
>> 藤井です。
>>
>> DataGridViewへのバインディングの動作の対応しているのは次の通りでした。
>> ・配列
>> ・System.Data.DataTable
>> ・System.Collections.ArrayList
>> ・System.Collections.Generic.List<T>
>> ・System.ComponentMode.BindingList<T>
>>
>> 参考にしてください。
>>
>>
>> [E-MAIL ADDRESS DELETED] さんは書きました:
>>> 菊池さま
>>>
>>> ご教授ありがとうございます。
>>> 山下真理です。
>>>
>>> BindingList<T>メソッドがあったなんで、勉強不足でした。
>>> 早速、実装してみたいと思います。
>>>
>>> ありがとうございました。
>>>
>>> 山下真理
>>>
>>>
>>> ----- Original Message -----
>>> 送信者: 菊池和彦<[E-MAIL ADDRESS DELETED]>
>>> 宛先: [E-MAIL ADDRESS DELETED]
>>> 日付:Wednesday, May, 28, 2008, 11:43 AM
>>> 件名: [seasar-dotnet:843] Re:[S2Form]Gridタイプコントロールについて
>>>
>>>>
>>>> 菊池です
>>>>
>>>> IList<T> をバインディング可能にしたいのであれば
>>>>
>>>> System.ComponentModel.BindingList<T>
>>>> http://msdn.microsoft.com/ja-jp/library/ms132679(VS.80).aspx
>>>>
>>>> を利用してみてはいかがでしょうか。(.NET Flamework 2.0以降)
>>>>
>>>> コンストラクタが IList<T> を受けますので、DBFlute から戻った IList<T> を元に BindingList
>>> <T> を
>>>> new してデータバインディングにまわすだけで良いと思います。
>>>>
>>>>
>>>> 2008/05/28 11:27 koyak <[E-MAIL ADDRESS DELETED]>:
>>>>> 山下様
>>>>>
>>>>> 小谷です。
>>>>>
>>>>>> DBFluteで取得した、List<Entry>をDTOに一度変換しList<Dto>として、
>>>>>> やると、表示できるようになりました。
>>>>>> DBFluteから取得したList<Entry>をそのまま利用できないようでした。。。
>>>>> 現行の.NETの仕様が関係しているかもしれません。
>>>>> http://msdn.microsoft.com/ja-jp/library/system.windows.forms.binding(VS.80).aspx
>>>>> 上記ドキュメントを読む限りでは
>>>>> コントロールにバインディング可能なのは(Genericではない方の)IList実装型です。
>>>>>
>>>>>> List<Dto>として、
>>>>>> やると、表示できるようになりました。
>>>>> ここで使われているList<T>はGenricではないIListとGenericなIList<T>の両方を実装しています。
>>>
>>>>> (名前がほぼ同じなのでわかりにくいですが)
>>>>>
>>>>> それに対してDBFluteのSelectListが返すリストはListResultBeanという型で、これは
>>>>> GenericであるIList<T>を実装しており、GenericではないIListは実装していません。
>>>>>
>>>>> まだ推測のレベルなのですが、上記の違いにより
>>>>> データが取れていてもDataGridViewに検索結果が反映されない、という
>>>>> 現象が起こっている可能性があります。
>>>>>
>>>>> はっきりとしたことがわかりましたら、またご連絡致します。
>>>>>
>>>>> -----------------------------------------------------------------------
>>>>> koyak
>>>>> [E-MAIL ADDRESS DELETED]
>>>>> -----------------------------------------------------------------------
>>>>>
>>>>> 2008/05/28 8:50  <[E-MAIL ADDRESS DELETED]>:
>>>>>> 山下です。
>>>>>>
>>>>>> いつもお世話になっております。
>>>>>>
>>>>>> Gridの表示ですが、0件のように行が表示されておりません。
>>>>>> DBFluteで取得した、List<Entry>をDTOに一度変換しList<Dto>として、
>>>>>> やると、表示できるようになりました。
>>>>>> DBFluteから取得したList<Entry>をそのまま利用できないようでした。。。
>>>>>>
>>>>>> public class HogeDto{
>>>>>>     public IList<Hoge> List { get; set; }
>>>>>> }
>>>>>>
>>>>>> public class DataDto{
>>>>>>    public string Name { get; set; }
>>>>>> }
>>>>>>
>>>>>> [Control("catList", "DataSource", "List")]
>>>>>> public partial class HogeForm : S2Form {
>>>>>>  public void Hoge(){
>>>>>>     DataDto hoge = new DataDto();
>>>>>>     hoge.Name = "ほげほげ";
>>>>>>     IList<DataDto> ls = new List<DataDto>();
>>>>>>     ls.Add(hoge);
>>>>>>     HogeDto dto = new HogeDto();
>>>>>>     dto.List = ls;
>>>>>>     this.DataSource = dto;
>>>>>>  }
>>>>>> }
>>>>>>
>>>>>>
>>>>>> ----- Original Message -----
>>>>>> 送信者: Hiroaki Fujii<[E-MAIL ADDRESS DELETED]>
>>>>>> 宛先: [E-MAIL ADDRESS DELETED]
>>>>>> 日付:Tuesday, May, 27, 2008, 03:38 PM
>>>>>> 件名: [seasar-dotnet:840] Re:[S2Form]Gridタイプコントロールについて
>>>>>>
>>>>>>>
>>>>>>> 藤井です。
>>>>>>>
>>>>>>> マッピングに関する認識はそのとおりです。
>>>>>>>
>>>>>>> 一つ、教えていただきたい点があります。
>>>>>>> Gridの表示ですが、0件のように行が表示されていないのでしょうか?
>>>>>>> それともDBFluteでの取得件数分だけ、行数があるのでしょうか?
>>>>>>> 列の状況も教えていただけると助かります。
>>>>>>>
>>>>>>>
>>>>>>> [E-MAIL ADDRESS DELETED] さんは書きました:
>>>>>>>> 山下です。
>>>>>>>>
>>>>>>>> ご回答ありがとうございます。
>>>>>>>>
>>>>>>>> 参考にさせていただき、プログラミングさせていただきました。
>>>>>>>> しかし、まだ、何かが足らないようで、Gridに反映されませんでした。
>>>>>>>> フォーム側の設定としては、DataGridViweのバインド列のプロパティの、
>>>>>>>> DataPropertyNameと、IList<Hoge>無いのHoge内のプロパティが
>>>>>>>> マッピングして、表示されるという認識でよろしいでしょうか?
>>>>>>>>
>>>>>>>> DBFlute側でのデータは、取得できているようでした。
>>>>>>>>
>>>>>>>> 山下 真理
>>>>>>>>
>>>>>>>>
>>>>>>>>> public class HogeDto{
>>>>>>>>>     public IList<Hoge> List { get; set; }
>>>>>>>>> }
>>>>>>>>>
>>>>>>>>> [Control("catList", "DataSource", "List")]
>>>>>>>>> public partial class HogeForm : S2Form {
>>>>>>>>>     public void Hoge(){
>>>>>>>>>            HogeDto dto = new HogeDto();
>>>>>>>>>             dto.List = (DBFluteの検索メソッドなど)
>>>>>>>>>            this.DataSource = dto;
>>>>>>>>>     }
>>>>>>>>> }
>>>>>>>>>
>>>>>>>>
>>>>>>>> ----- Original Message -----
>>>>>>>> 送信者: koyak<[E-MAIL ADDRESS DELETED]>
>>>>>>>> 宛先: [E-MAIL ADDRESS DELETED]
>>>>>>>> 日付:Monday, May, 26, 2008, 11:31 PM
>>>>>>>> 件名: [seasar-dotnet:837] Re:[S2Form]Gridタイプコントロールについて
>>>>>>>>
>>>>>>>>> 山下様
>>>>>>>>>
>>>>>>>>> 小谷です。
>>>>>>>>>
>>>>>>>>> ご利用いただき、ありがとうございます!
>>>>>>>>>
>>>>>>>>> ご質問の件ですが、
>>>>>>>>> >[Control("catList", "DataSource", "List")]
>>>>>>>>>
>>>>>>>>> この記述によって結び付けられるのは
>>>>>>>>> 「catList」の「DataSource」プロパティと、
>>>>>>>>> S2Formを継承したクラスがもつDataSourceプロパティに設定されている
>>>>>>>>> オブジェクトの「List」プロパティになります。
>>>>>>>>> (なので検索結果のリストを直接DataSourceプロパティに
>>>>>>>>> 設定しても反映されません)
>>>>>>>>>
>>>>>>>>> ※対応するドキュメント
>>>>>>>>> http://s2container.net.seasar.org/ja/s2windows-s2form.html#grid
>>>>>>>>>
>>>>>>>>> コードにすると下記のようなイメージです。
>>>>>>>>> (スペース省略のため、C#3.5の文法で書いています)
>>>>>>>>>
>>>>>>>>> public class HogeDto{
>>>>>>>>>     public IList<Hoge> List { get; set; }
>>>>>>>>> }
>>>>>>>>>
>>>>>>>>> [Control("catList", "DataSource", "List")]
>>>>>>>>> public partial class HogeForm : S2Form {
>>>>>>>>>     public void Hoge(){
>>>>>>>>>            HogeDto dto = new HogeDto();
>>>>>>>>>             dto.List = (DBFluteの検索メソッドなど)
>>>>>>>>>            this.DataSource = dto;
>>>>>>>>>     }
>>>>>>>>> }
>>>>>>>>>
>>>>>>>>> ボタンか何かでHogeメソッドを呼ぶとDBFluteを使って
>>>>>>>>> 検索を行い、結果をcatList上に表示するはずです。
>>>>>>>>>
>>>>>>>>> ----------------------------------------------------------------
>>>>>>>>> koyak
>>>>>>>>> [E-MAIL ADDRESS DELETED]
>>>>>>>>> ----------------------------------------------------------------
>>>>>>>>>
>>>>>>>>> 2008/05/26 19:44  <[E-MAIL ADDRESS DELETED]>:
>>>>>>>>>> いつもお世話になっております。
>>>>>>>>>> 山下です。
>>>>>>>>>>
>>>>>>>>>> S2Continar 1.3.9
>>>>>>>>>> Quill 1.3.9
>>>>>>>>>> DBFlute 0.7.2
>>>>>>>>>> S2Form
>>>>>>>>>>
>>>>>>>>>> を利用させて頂いております。
>>>>>>>>>> Gridタイプコントロールを利用したく、コーディングをしております。
>>>>>>>>>>
>>>>>>>>>> DBFluteから取得した内容を、Gridに反映したく、Controlの定義方法について
>>>>>>>>>> 質問させていただきます。
>>>>>>>>>> Controlの指定は、下記のように設定をしております。
>>>>>>>>>>
>>>>>>>>>> [Control("catList", "DataSource", "List")]
>>>>>>>>>>
>>>>>>>>>> DataSourceに渡されるDtoのプロパティ名と、Grid(catList)の、
>>>>>>>>>> カラムDataPropertyNameの名称を同じにすることにより、
>>>>>>>>>> Grid表示されるようになると思うのですが、認識としましては、
>>>>>>>>>> あっておりますでしょうか?
>>>>>>>>>> DBFlute側で取得してきて、DataSourceに入れた後に、Gridに反映されて
>>>>>>>>>> いなく悩んでおります。
>>>>>>>>>>
>>>>>>>>>> Gridタイプコントロールについて、今あがっているドキュメント以外に、
>>>>>>>>>> 詳細に記載されているドキュメント等がありましたら、
>>>>>>>>>> URL等を教えていただけないでしょうか。
>>>>>>>>>>
>>>>>>>>>> 宜しくお願い致します。
>>>>>>>>>>
>>>>>>>>>> 山下
>>>>>>>>>> _______________________________________________
>>>>>>>>>> seasar-dotnet mailing list
>>>>>>>>>> [E-MAIL ADDRESS DELETED]
>>>>>>>>>> https://ml.seasar.org/mailman/listinfo/seasar-dotnet
>>>>>>>>>>
>>>>>>>>> _______________________________________________
>>>>>>>>> seasar-dotnet mailing list
>>>>>>>>> [E-MAIL ADDRESS DELETED]
>>>>>>>>> https://ml.seasar.org/mailman/listinfo/seasar-dotnet
>>>>>>>>>
>>>>>>>> _______________________________________________
>>>>>>>> seasar-dotnet mailing list
>>>>>>>> [E-MAIL ADDRESS DELETED]
>>>>>>>> https://ml.seasar.org/mailman/listinfo/seasar-dotnet
>>>>>>>>
>>>>>>> _______________________________________________
>>>>>>> seasar-dotnet mailing list
>>>>>>> [E-MAIL ADDRESS DELETED]
>>>>>>> https://ml.seasar.org/mailman/listinfo/seasar-dotnet
>>>>>>>
>>>>>> _______________________________________________
>>>>>> seasar-dotnet mailing list
>>>>>> [E-MAIL ADDRESS DELETED]
>>>>>> https://ml.seasar.org/mailman/listinfo/seasar-dotnet
>>>>>>
>>>>> _______________________________________________
>>>>> seasar-dotnet mailing list
>>>>> [E-MAIL ADDRESS DELETED]
>>>>> https://ml.seasar.org/mailman/listinfo/seasar-dotnet
>>>>>
>>>>
>>>>
>>>> --
>>>>  Kazuhiko Kikuchi <[E-MAIL ADDRESS DELETED]>
>>>>  Microsoft Valueable Professional - Visual C# 2004-2007
>>>> _______________________________________________
>>>> seasar-dotnet mailing list
>>>> [E-MAIL ADDRESS DELETED]
>>>> https://ml.seasar.org/mailman/listinfo/seasar-dotnet
>>>>
>>> _______________________________________________
>>> seasar-dotnet mailing list
>>> [E-MAIL ADDRESS DELETED]
>>> https://ml.seasar.org/mailman/listinfo/seasar-dotnet
>>>
>>
>> _______________________________________________
>> seasar-dotnet mailing list
>> [E-MAIL ADDRESS DELETED]
>> https://ml.seasar.org/mailman/listinfo/seasar-dotnet
>>
> _______________________________________________
> seasar-dotnet mailing list
> [E-MAIL ADDRESS DELETED]
> https://ml.seasar.org/mailman/listinfo/seasar-dotnet
>



-- 
 Kazuhiko Kikuchi <[E-MAIL ADDRESS DELETED]>
 Microsoft Valueable Professional - Visual C# 2004-2007


seasar-dotnet メーリングリストの案内